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, 20list sort numbers : numbers
In C#:
List<int> numbers = new List<int> { 5, 15, 10 };​// 5, 10, 15, 20numbers.Sort();
In Python:
numbers = [20, 5, 15, 10]​# 5, 10, 15, 20numbers.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 : Sizemember variable declare : public Count int​constructor start : public Size count intoperation : { member variable : public { this } Count } equals countconstructor endclass end​comment line : ...​variable : sizes { list type : Size } { list new : Size { new : Size 3 } { new : Size 1 } { new : Size 2 } }​comment line : 1, 2, 3list 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, 3sizes.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, 3sizes.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 : Fruitmember variable declare : public Name string​constructor start : public Fruit name stringoperation : { member variable : public { this } Name } equals nameconstructor endclass 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)