【问题标题】:Swift : what is the right way to split up a [String] resulting in a [[String]] with a given example?斯威夫特:用给定的例子拆分 [String] 导致 [[String]] 的正确方法是什么?
【发布时间】:2020-05-09 12:48:24
【问题描述】:

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

具体例子: 拆分 ["1","2","3","4","5","6","7","8","9"],最大拆分大小为 4

代码将产生 [["1","2","3","4"],["4","5","6","7"],["7"," 8","9"]]

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

【问题讨论】:

  • 为什么4和7重复?

标签: arrays slice


【解决方案1】:

您可以通过map 将索引添加到您的数组中:

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

["1","2","3","4","5","6","7","8","9"].chunked(size: 4)
// -> [["1", "2", "3", "4"], ["5", "6", "7", "8"], ["9"]]

["1","2","3","4","5","6","7","8","9"].chunked(size: 3)
// -> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]]

【讨论】:

  • 您好,先生,我尝试过这种方式,但根据要求,显示结果是不可接受的。我想在两个子阵列中重复 5 吗?我的意思是前一个子数组的结束数应该是下一个子数组的开始数?
  • @ChetanPote 将stride(from: 0, to: cnt, by: size) 更改为stride(from: 0, to: cnt, by: size - 1)[["1","2","3","4"],["4","5","6","7"],["7","8","9"]]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多