使用Closures对未排序的数组进行排序

时间:2016-12-31 16:47:08

标签: swift2

let unsortedArray = [98,23,643,678,2,568,1,234,556,4] {
    (first:Int , second:Int) -> Bool in 

    if first < second {
        return true
    } else{
        return false
    }
}

上面的代码是使用Swift 2和Xcode 7.3对未排序的数组进行排序。

我想知道如何打印结果?

1 个答案:

答案 0 :(得分:1)

语法为:

let unsortedArray = [98, 23, 643, 678, 2, 568, 1, 234, 556, 4]
let sortedArray = unsortedArray.sort() { (first: Int, second: Int) -> Bool in
    if first < second {
        return true
    } else {
        return false
    }
}

print("\(sortedArray)")

注意,在Swift 2.3中sort,但在Swift 3中,现在称为sorted

顺便说一句,这可以简化:

let sortedArray = unsortedArray.sort { (first: Int, second: Int) -> Bool in
    return first < second
}

或者,进一步简化为使用匿名闭包参数:

let sortedArray = unsortedArray.sort {
    return $0 < $1
}

因为闭包内部有一个表达式,所以你可以进一步简单地说:

let sortedArray = unsortedArray.sort { $0 < $1 }

或者,进一步简化为:

let sortedArray = unsortedArray.sort(<)

或者,因为数组的元素Int类型符合Comparable,所以可以完全省略闭包并使用不带参数的不同sort方法:

let sortedArray = unsortedArray.sort()

注意,这要求数组的元素具有:

  

中定义的小于运算符(func <)   Comparable一致性是一个   strict weak ordering   在self

中的元素