gpt4 book ai didi

arrays - Swift - 字符串数组到具有常量字符串的多个子数组

转载 作者:可可西里 更新时间:2023-11-01 00:37:37 26 4
gpt4 key购买 nike

假设我有这个字符串数组:

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)])
}

关于arrays - Swift - 字符串数组到具有常量字符串的多个子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30221230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com