假设我有以下字符串数组:
let Vehicles = ["Aeroplane", "Bicycle", "CarVehicle", "Lorry", "Motorbike", "Scooter", "Ship", "Train"]
我想要的是这个结果:
let resultArray = [["Aeroplane", "Bicycle", "CarVehicle", "Lorry"], ["Motorbike", "Scooter", "Ship", "Train"]]
我知道我可以做到这一点,for
但是我想在Swift中使用高阶函数。我的意思是像map,reduce,filter之类的功能。我认为这样做是可能的,而且可能会更好。谁能帮我这个?谢谢
有一种可能的解决方案map()
和stride()
:
let vehicles = ["Aeroplane", "Bicycle", "CarVehicle", "Lorry", "Motorbike", "Scooter", "Ship", "Train"]
let each = 4
let resultArray = map(stride(from: 0, to: vehicles.count, by: each)) {
vehicles[$0 ..< advance($0, each, vehicles.count)]
}
println(resultArray)
// [[Aeroplane, Bicycle, CarVehicle, Lorry], [Motorbike, Scooter, Ship, Train]]
advance()
在闭包中的使用可确保代码有效,即使数组元素的数量不是4的倍数(然后结果中的最后一个子数组也会更短)。
您可以简化为
let resultArray = map(stride(from: 0, to: vehicles.count, by: each)) {
vehicles[$0 ..< $0 + each]
}
如果您知道数组元素的数量是4的倍数。
严格来说,元素resultArray
不是数组而是数组切片。在许多情况下都没关系,否则您可以将其替换为
let resultArray = map(stride(from: 0, to: vehicles.count, by: each)) {
Array(vehicles[$0 ..< advance($0, each, vehicles.count)])
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句