Swift Map排序关闭

时间:2016-11-20 09:54:49

标签: arrays swift sorting mapping closures

我试图理解快速关闭并且缺少一些基本的东西 给出以下示例:

var numbers = [20, 19, 7, 12]
numbers.map({(number: Int) -> Int in return 3 * number})
numbers.map {(number: Int) -> Int in return 3 * number}
numbers.sorted {(n1:Int, n2:Int) -> Bool in return n1 < n2}

为什么额外的大括号适用于地图但没有排序? 即。

numbers.sorted({(n1:Int, n2:Int) -> Bool in return n1 < n2})

无法编译......

"error: argument passed to call that takes no arguments"

有人可以解释一下这个区别吗?感谢。

2 个答案:

答案 0 :(得分:2)

因为排序方法是func sorted(by:)。因此,您必须添加 by  param名称:

numbers.sorted(by: {(n1:Int, n2:Int) -> Bool in return n1 < n2})

答案 1 :(得分:2)

sorted()

  

集合元素的排序数组。

表示它返回一个新的-sorted-数组,它应该分配给一个新实例。实现它的简单方法是:

ComputerNamePhysicalDnsDomain

如果您需要对数组本身进行排序,请改用sort()

let numbers = [20, 19, 7, 12]
let sortedNumbers = numbers.sorted { $0 < $1 } // [7, 12, 19, 20]

注意:使用var numbers = [20, 19, 7, 12] numbers.sort { $0 < $1 } print(numbers) // [7, 12, 19, 20] 时,请确保sort()数组为var(可变)。

同样的行为也适用于map(_:)

  

返回一个数组,其中包含映射给定闭包的结果   在序列的元素上。

您还可以通过更简单的方式实现numbers

map()

如果要映射数组本身,则应实现:

let numbers = [20, 19, 7, 12]

let mappedNumbers = numbers.map { $0 * 3 }

print(mappedNumbers) // [60, 57, 21, 36]

或者在一行中:

var numbers = [20, 19, 7, 12]
numbers = numbers.map { $0 * 3 }

print(numbers) // [60, 57, 21, 36]