作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定任何类型的数组和想要的子数组数量,我需要这个输出:
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/
我是一名优秀的程序员,十分优秀!