给定一个已排序的整数数组:
let array = [1, 3, 4, 7, 8, 12]
我想在两个相邻数字之间的差异超过2的索引处对其进行分区并创建一个新的子数组,这样我最终会得到以下输出:
[ [1,3,4], [7,8], [12] ]
在 Swift 中实现这一目标的优雅方式是什么?组合框架是否为此提供了内置运算符?
实现数组分组的最简单方法是使用reduce函数,如果我们想将数组转换为某种不同的数据结构,该函数非常有用:
let arr = [1, 3, 4, 7, 8, 12]
let result = arr.dropFirst().reduce(into: [[1]]) {
if abs($0.last!.last! - $1) >= 3 {
$0.append([$1])
} else {
$0[$0.endIndex - 1].append($1)
}
}
print(result)
逻辑是这样的:
将打印
[[1, 3, 4], [7, 8], [12]]