对 Array 和 List 进行排序

对 Array 进行排序

创建无序 Array,并对这个 Array 进行排序。

代码:

import std.sort.*

/* 测试 */
main() {
    // 对 Int64 数组升序排序
    var a = [1, 3, 5, 2, 4]
    sort(a)
    println(a)

    // 按照年龄升序排序
    var b = [Student("A", 8), Student("B", 7), Student("C", 3), Student("D", 4), Student("E", 6)]
    let comparator = {l: Student, r: Student => l.age.compare(r.age)}
    sort(b, by: comparator)
    println(b)

    // 按照年龄降序排序
    var c = [Student("A", 8), Student("B", 7), Student("C", 3), Student("D", 4), Student("E", 6)]
    let lessThan = {l: Student, r: Student => l.age < r.age}
    sort(c, lessThan: lessThan, descending: true)
    println(c)

    // 按照年龄升序排序,并且是稳定排序。
    var d = [Student("A", 8), Student("B", 7), Student("C", 7), Student("D", 4), Student("E", 7)]
    let key = {i: Student => i.age}
    sort(d, key: key, stable: true)
    println(d)
    return 0
}

class Student <: ToString {
    public var name: String
    public var age: Int64
    public init (name: String, age: Int64) {
        this.name = name
        this.age = age
    }
    public func toString(): String {
        return "{name: ${name} age: ${age}}"
    }
}

运行结果:

[1, 2, 3, 4, 5]
[{name: C age: 3}, {name: D age: 4}, {name: E age: 6}, {name: B age: 7}, {name: A age: 8}]
[{name: A age: 8}, {name: B age: 7}, {name: E age: 6}, {name: D age: 4}, {name: C age: 3}]
[{name: D age: 4}, {name: B age: 7}, {name: C age: 7}, {name: E age: 7}, {name: A age: 8}]

对 List 进行排序

创建无序 List,并对这个 List 进行排序。

代码:

import std.sort.*
import std.collection.*

/* 测试 */
main() {
    // 对 Int64 的 List 进行升序排序
    var a = ArrayList<Int64>([1, 3, 5, 2, 4])
    sort(a)
    println(a)

    // 按照年龄升序排序
    var b = ArrayList<Student>([Student("A", 8), Student("B", 7), Student("C", 3), Student("D", 4), Student("E", 6)])
    let comparator = {l: Student, r: Student => l.age.compare(r.age)}
    sort(b, by: comparator)
    println(b)

    // 按照年龄降序排序
    var c = ArrayList<Student>([Student("A", 8), Student("B", 7), Student("C", 3), Student("D", 4), Student("E", 6)])
    let lessThan = {l: Student, r: Student => l.age < r.age}
    sort(c, lessThan: lessThan, descending: true)
    println(c)

    // 按照年龄升序排序,并且是稳定排序。
    var d = ArrayList<Student>([Student("A", 8), Student("B", 7), Student("C", 7), Student("D", 4), Student("E", 7)])
    let key = {i: Student => i.age}
    sort(d, key: key, stable: true)
    println(d)
    return 0
}

class Student <: ToString {
    public var name: String
    public var age: Int64
    public init (name: String, age: Int64) {
        this.name = name
        this.age = age
    }
    public func toString(): String {
        return "{name: ${name} age: ${age}}"
    }
}

运行结果:

[1, 2, 3, 4, 5]
[{name: C age: 3}, {name: D age: 4}, {name: E age: 6}, {name: B age: 7}, {name: A age: 8}]
[{name: A age: 8}, {name: B age: 7}, {name: E age: 6}, {name: D age: 4}, {name: C age: 3}]
[{name: D age: 4}, {name: B age: 7}, {name: C age: 7}, {name: E age: 7}, {name: A age: 8}]