一尘不染

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

swift

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

具体示例:

以最大分割大小2分割[“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”,“ 7”]

该代码将产生[[“ 1”,“ 2”],[“ 3”,“ 4”],[“ 5”,“ 6”],[“ 7”]]

显然,我可以手动进行一些操作,但是我觉得像map()或reduce()这样的快速操作可能确实可以实现我想要的效果。


阅读 240

收藏
2020-07-07

共1个答案

一尘不染

我不会称它为美丽,但这是一种使用方法map

let numbers = ["1","2","3","4","5","6","7"]
let splitSize = 2
let chunks = numbers.startIndex.stride(to: numbers.count, by: splitSize).map {
  numbers[$0 ..< $0.advancedBy(splitSize, limit: numbers.endIndex)]
}

stride(to:by:)方法为您提供每个块的第一个元素的索引,因此您可以使用将这些索引映射到源数组的一个切片advancedBy(distance:limit:)

更具“功能性”的方法只是在数组上递归,如下所示:

func chunkArray<T>(s: [T], splitSize: Int) -> [[T]] {
    if countElements(s) <= splitSize {
        return [s]
    } else {
        return [Array<T>(s[0..<splitSize])] + chunkArray(Array<T>(s[splitSize..<s.count]), splitSize)
    }
}
2020-07-07