我试图理解快速关闭并且缺少一些基本的东西 给出以下示例:
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"
有人可以解释一下这个区别吗?感谢。
答案 0 :(得分:2)
因为排序方法是func sorted(by:)。因此,您必须添加 by
param名称:
numbers.sorted(by: {(n1:Int, n2:Int) -> Bool in return n1 < n2})
答案 1 :(得分:2)
集合元素的排序数组。
表示它返回一个新的-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]