I want to share with you guys my little try how to sort multidim array.
Hope someone this can help. If you have another good example for different type of sorting please post it here.
*SORTING MULTIDIM ARRAY BY NAME OR BY COUNT*
fn sortByNameOrCount arr1 arr2 type: maxtomin: =
(
local first, second
case type of (
(#name): (first = arr1[1] ; second = arr2[1])
(#count): (first = arr1[2].count ; second = arr2[2].count)
)
case of (
(first < second): if not maxtomin then -1 else 1
(first > second): if not maxtomin then 1 else -1
default:0
)
)
--example_#1 (sort by name alphabetically from Z to A)
multiArr = #(#("Branko",#(1,2,3,4)), #("John",#(1)), #("Richard",#(1,2,3)), #("Stalone",#(1,2,3,4,5)), #("Michael",#(1,2)))
qsort multiArr sortByNameOrCount type:#name maxtomin:true
multiArr
--result: #(#("Stalone", #(1, 2, 3, 4, 5)), #("Richard", #(1, 2, 3)), #("Michael", #(1, 2)), #("John", #(1)), #("Branko", #(1, 2, 3, 4)))
--example_#2 (sort by name alphabetically from A to Z)
multiArr = #(#("Branko",#(1,2,3,4)), #("John",#(1)), #("Richard",#(1,2,3)), #("Stalone",#(1,2,3,4,5)), #("Michael",#(1,2)))
qsort multiArr sortByNameOrCount type:#name maxtomin:false
multiArr
--result: #(#("Branko", #(1, 2, 3, 4)), #("John", #(1)), #("Michael", #(1, 2)), #("Richard", #(1, 2, 3)), #("Stalone", #(1, 2, 3, 4, 5)))
--example_#3 (sort by array count from max to min)
multiArr = #(#("Branko",#(1,2,3,4)), #("John",#(1)), #("Richard",#(1,2,3)), #("Stalone",#(1,2,3,4,5)), #("Michael",#(1,2)))
qsort multiArr sortByNameOrCount type:#count maxtomin:true
multiArr
--result:#(#("Stalone", #(1, 2, 3, 4, 5)), #("Branko", #(1, 2, 3, 4)), #("Richard", #(1, 2, 3)), #("Michael", #(1, 2)), #("John", #(1)))
--example_#4 (sort by array count from min to max)
multiArr = #(#("Branko",#(1,2,3,4)), #("John",#(1)), #("Richard",#(1,2,3)), #("Stalone",#(1,2,3,4,5)), #("Michael",#(1,2)))
qsort multiArr sortByNameOrCount type:#count maxtomin:false
multiArr
--result:#(#("John", #(1)), #("Michael", #(1, 2)), #("Richard", #(1, 2, 3)), #("Branko", #(1, 2, 3, 4)), #("Stalone", #(1, 2, 3, 4, 5)))
By barigazy · 2012-05-30
P3D_PathScripts · 2017-02-24