title: “ARRAY::SORT” version: “1g” date: 2023-11-22 author: “laplante@plcb.ca”
array::sort Sort an Array
array::sort(array[, less:f, sortby: "string" | "float" | "integer" | "func"])
sort(array[, less:f, sortby: "string" | "float" | "integer" | "func"])
Sorts the elements of an array according to the specified sortby
mode.
When sortby
is "func"
, you must also provide:
bool
— a function that returns true
if a
should come before b
.Custom numeric sort using a comparison function
res={{
func compare(a,b) {
return a < b;
}
a := [5,9,2,4,6,3,3,6,1,-1,0];
sort(a, sortby:"func", less:compare);
a;
}}.
Returns:
res=[-1,0,1,2,3,3,4,5,6,6,9]
Sorting an array of objects by different fields
res={{
func by_firstname(a,b) {
return a.firstname < b.firstname;
}
func by_lastname(a,b) {
return a.lastname < b.lastname;
}
a := [
{ "firstname" : "a", "lastname" : "z" },
{ "firstname" : "z", "lastname" : "a" },
{ "firstname" : "p", "lastname" : "p" }
];
sort(a, sortby:"func", less:by_firstname);
"\n"; a; "\n";
sort(a, sortby:"func", less:by_lastname);
a;
}}.
Returns:
[{"firstname":"a","lastname":"z"},{"firstname":"p","lastname":"p"},{"firstname":"z","lastname":"a"}]
[{"firstname":"z","lastname":"a"},{"firstname":"p","lastname":"p"},{"firstname":"a","lastname":"z"}]
Integer sort
res={{
a := [5,9,2,4,6,3,3,6,1,-1,0];
sort(a, sortby:"integer");
a;
}}.
Returns:
res=[-1,0,1,2,3,3,4,5,6,6,9]
laplante@plcb.ca