gpt4 book ai didi

arrays - 快速拆分数组的优雅方式

转载 作者:行者123 更新时间:2023-12-03 09:16:42 24 4
gpt4 key购买 nike

给定任何类型的数组和想要的子数组数量,我需要这个输出:

print([0, 1, 2, 3, 4, 5, 6].splitInSubArrays(into: 3))
// [[0, 3, 6], [1, 4], [2, 5]]
即使没有“足够”的元素来填充这些,输出也必须包含正确数量的子数组:
print([0, 1, 2].splitInSubArrays(into: 4))
// [[0], [1], [2], []]
我现在有这个工作实现,但有没有更好(更优雅)的方式来实现这个输出:
extension Array {

func splitInSubArrays(into size: Int) -> [[Element]] {

var output: [[Element]] = []

(0..<size).forEach {

var subArray: [Element] = []

for elem in stride(from: $0, to: count, by: size) {
subArray.append(self[elem])
}

output.append(subArray)
}

return output
}
}

最佳答案

您可以用 map() 替换这两个循环操作:

extension Array {
func splitInSubArrays(into size: Int) -> [[Element]] {
return (0..<size).map {
stride(from: $0, to: count, by: size).map { self[$0] }
}
}
}
map()将每个偏移量映射到相应的数组,内部 map()将索引映射到数组元素。
例子:
print([0, 1, 2, 3, 4, 5, 6].splitInSubArrays(into: 3))
// [[0, 3, 6], [1, 4], [2, 5]]

print([0, 1, 2].splitInSubArrays(into: 4))
// [[0], [1], [2], []]

关于arrays - 快速拆分数组的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64932656/

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