gpt4 book ai didi

ios - Swift:将 [String] 拆分为具有给定子数组大小的 [[String]] 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 10:44:28 34 4
gpt4 key购买 nike

从一个大的 [String] 和给定的子数组大小开始,我可以将该数组拆分为更小的数组的最佳方法是什么? (最后一个数组将小于给定的子数组大小)。

具体示例:

Split up ["1","2","3","4","5","6","7"] with max split size 2

The code would produce [["1","2"],["3","4"],["5","6"],["7"]]

显然我可以更手动地完成此操作,但我觉得像map()或reduce()这样的快速方法可以非常漂亮地完成我想要的事情。

最佳答案

在 Swift 3/4 中,这将如下所示:

let numbers = ["1","2","3","4","5","6","7"]
let chunkSize = 2
let chunks = stride(from: 0, to: numbers.count, by: chunkSize).map {
Array(numbers[$0..<min($0 + chunkSize, numbers.count)])
}
// prints as [["1", "2"], ["3", "4"], ["5", "6"], ["7"]]

作为数组的扩展:

extension Array {
func chunked(by chunkSize: Int) -> [[Element]] {
return stride(from: 0, to: self.count, by: chunkSize).map {
Array(self[$0..<Swift.min($0 + chunkSize, self.count)])
}
}
}

或者稍微详细一点,但更笼统:

let numbers = ["1","2","3","4","5","6","7"]
let chunkSize = 2
let chunks: [[String]] = stride(from: 0, to: numbers.count, by: chunkSize).map {
let end = numbers.endIndex
let chunkEnd = numbers.index($0, offsetBy: chunkSize, limitedBy: end) ?? end
return Array(numbers[$0..<chunkEnd])
}

这更通用,因为我对集合中索引的类型做了更少的假设。在之前的实现中,我假设它们可以进行比较和添加。

请注意,在 Swift 3 中,推进索引的功能已从索引本身转移到集合中。

关于ios - Swift:将 [String] 拆分为具有给定子数组大小的 [[String]] 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56055899/

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