我的任务: 我需要将 Array 分成几个具有以下属性的 Arrays of Arrays:
每个子数组都是一个范围内的连续整数。例如
[1,2,3,4,5]
将是[[1,5]]
。当没有连续的整数时创建一个新的子数组。例如
[1,2,4,5]
将是[[1,2], [4,5]]
示例:
如果我有这个整数数组 - [0, 1, 5, 6, 3, 7]
预期结果 - [[0, 1], [3], [5, 7]]
我已经试过了:
let array: [Int] = [0, 1, 3, 4, 5, 6, 7]
var group: [[Int]] = []
var temp: [Int] = [Int]()
for (index, element) in array.enumerated() {
if index + 1 < array.count {
let nextElement = array[index + 1]
let step = nextElement - element
// temp.append(element)
if(step) == 1 { // Until it's in range
temp.append(element)
} else { // One-by-one
temp.append(element)
group.append(temp)
temp = [Int]()
group.append([nextElement])
}
} else {
print(index)
}
}
print(group)
从我的代码中,我得到了这个结果 - [[0, 1], [3]]
最佳答案
有一个 API,IndexSet :
不清楚你想要什么,你的例子含糊不清。
如果你想要一个范围数组
let indexSet = IndexSet(array)
let rangeView = indexSet.rangeView
let group = rangeView.map { $0.indices.startIndex..<$0.indices.endIndex }
如果你想要一个按范围分组的数组
let indexSet = IndexSet(array)
let rangeView = indexSet.rangeView
let group = rangeView.map { Array($0.indices) }
关于ios - 整数数组到范围数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56399048/