根据两个相邻元素之间的差异将数组拆分为子数组

问题描述 投票:0回答:1

给定一个已排序的整数数组:

let array = [1, 3, 4, 7, 8, 12]

我想在两个相邻数字之间的差异超过2的索引处对其进行分区并创建一个新的子数组,这样我最终会得到以下输出:

[ [1,3,4], [7,8], [12] ]

在 Swift 中实现这一目标的优雅方式是什么?组合框架是否为此提供了内置运算符?

arrays swift algorithm combine
1个回答
0
投票

实现数组分组的最简单方法是使用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)

逻辑是这样的:

  • 如果当前结果的最后一个元素与当前迭代的元素相差3或更多,则开始一个新数组(“if”子句)
  • 否则,将当前迭代的元素追加到最后一个子数组。

将打印

[[1, 3, 4], [7, 8], [12]]
© www.soinside.com 2019 - 2024. All rights reserved.