Sorting
Budgie supports four forms of sorting lists, all in-place.
For lists of type
int
or double
, or a generic guaranteed to only ever either of those numeric types, you can sort the list with list sort numbers
. It takes in the name of the list and sorts it with numeric comparisons.JavaScript runtimes default to sorting values as strings, so this will pass in a lambda to compare them as numbers as needed.
variable : numbers { list type : int } { list new : int 20 5 15 10 }
comment line : 5, 10, 15, 20
list sort numbers : numbers
In C#:
List<int> numbers = new List<int> { 5, 15, 10 };
// 5, 10, 15, 20
numbers.Sort();
In Python:
numbers = [20, 5, 15, 10]
# 5, 10, 15, 20
numbers.sort()
For lists of type
string
, you can sort the list with list sort strings
. It takes in the name of the list and sorts it with string comparisons.variable : fruits { list type : string } { list new : string "date", "apple" "cherry", "banana" }
comment line : "apple", "banana", "cherry", "date"
In C#:
List<string> fruits = new List<string> { "date", "apple", "cherry", "banana" };
// "apple", "banana", "cherry", "date"
fruits.Sort();
In Python:
fruits = "date", "apple", "cherry", "banana"
# "apple", "banana", "cherry", "date"
fruits.sort()
Lists of complex objects, namely class or interface instances, can be sorted by a single keyed member of those objects.
list sort member numbers
takes in the name of a list, the privacy type of members, a name for instances inside a comparison lambda, and the PascalCase key to look up under the instances.Members will be compared using the built-in
<
operator.class start : Size
member variable declare : public Count int
constructor start : public Size count int
operation : { member variable : public { this } Count } equals count
constructor end
class end
comment line : ...
variable : sizes { list type : Size } { list new : Size { new : Size 3 } { new : Size 1 } { new : Size 2 } }
comment line : 1, 2, 3
list sort member numbers : sizes public size Count
In C#:
class Size
{
public int Count;
public Size(int count)
{
this.Count = count;
}
}
// ...
List<Sizes> sizes = new List<Size> { new Size(3), new Size(1), new Size(2) };
// 1, 2, 3
sizes.Sort((sizeA, sizeB) => sizeA.Name < sizeB.Name ? 1 : -1);
In Python:
class Size:
def __init__(self, count):
self.count = count
# ...
sizes = [Size(3), Size(1), Size(2)]
# 1, 2, 3
sizes.sort(key = lambda size: size.count)
list sort member strings
takes in the name of a list, the privacy type of members, a name for instances inside a comparison lambda, and the PascalCase key to look up under the instances. It's equivalent to list sort member numbers
but compares members using built-in string comparisons.class start : Fruit
member variable declare : public Name string
constructor start : public Fruit name string
operation : { member variable : public { this } Name } equals name
constructor end
class end
comment line : ...
variable : fruits { list type : Fruit } { list new : Fruit { new : Person "banana" } { new : Person "cherry" } { new : Person "apple" } }
comment line : "apple", "banana", "cherry"
list sort member strings : fruits public fruit Name
In C#:
class Fruit
{
public string Name;
public Fruit(string name)
{
this.Name = name;
}
}
// ...
List<Fruit> fruits = new List<Fruit> { new Fruit("banana"), new Fruit("cherry"), new Fruit("apple") };
// "apple", "banana", "cherry"
fruits.Sort((fruitA, fruitB) => fruitB.Name.CompareTo(fruitA.Name));
In Python:
class Fruit:
def __init__(self, name):
self.name = name
# ...
fruits = [Fruit("banana"), Fruit("cherry"), Fruit("apple")]
# "apple", "banana", "cherry"
fruits.sort(key = lambda fruit: fruit.name)
Last modified 3yr ago