我试图将数组拆分成对。我可以拆分成连续的对,但我想拆分成包括结果中提到的先前值的对
逻辑分裂连续对,我试过了。
extension Array {
func chunks(_ chunkSize: Int) -> [[Element]] {
return stride(from: 0, to: self.count, by: chunkSize).map {
Array(self[$0..<Swift.min($0 + chunkSize, self.count)])
}
}
字符串
阵法:
["1", "2", "3", "4", "5", "6", "7", "8", "9"]
型
结果如下:
[["1", "2"], ["2", "3"], ["3", "4"], ["4", "5"], ["6", "7"], ["7", "8"], ["8", "9"]]
型
4条答案
按热度按时间fhg3lkii1#
不如这样吧:
字符串
用于输出
[[1、2]、[2、3]、[3、4]、[4、5]、[5、6]、[6、7]、[7、8]、[8、9]]
编辑:
如果你想要任意的块大小,你可以这样写扩展:
型
使用参数
includePartialChunk
告诉函数,当数组大小不是块大小的偶数倍时,是否要在末尾包含“部分块”。(默认值)它返回最后一个块,该块小于chunkSize,但位于数组的末尾。如果为false,则只返回完整大小的块,但会在末尾跳过不适合完整大小块的数组元素。(我必须研究Leo的
UnfoldSequence
版本,看看我的代码是否能适应它。aemubtdh2#
这不是对这个问题的直接回答,但序列的元素应该是惰性计算的。你应该使用Swift
UnfoldSequence
类型,如下所示:字符串
使用方法:
型
如果你需要控制每个子序列的元素数量,并且它是否包括尾部:
型
使用方法:
型
这将打印:
[第1、2、3页]
[3、4、5]
[5、6、7]
[第7、8、9页]
[9、10]
型
wb1gzix03#
这个操作的代号是
windows
。它完全按照你的要求执行,计数2...字符串
……但还不清楚它是否能满足你对其他罪名的要求。
7dl7o3gd4#
至少,它很容易阅读和O(n)复杂度。
字符串
用法如下:
型