我有一个整数输入数组。我想基于缺少的整数将此数组拆分为多个数组,并将其附加到新数组中。我认为split
可以在这里使用,但不知道该怎么做。我只想要arrayFinal
。
myArray = [0,1,2,4,7,8]
期望的输出
arrayOne = [0,1,2]
arrayTwo = [4]
arrayThree = [7,8]
arrayFinal = [[0,1,2], [4], [7,8]]
您可以对数组进行排序并按顺序迭代它们。检查元素减1是否等于2D数组的最后一个元素,如果为true,则以其他方式附加带元素的新数组并增加子数组的索引:
extension Collection where Element == Int {
func grouped() -> [[Element]] {
let elements = Set(self).sorted()
guard let first = elements.first else { return [] }
var result = [[first]]
var i = 0
for element in elements.dropFirst() {
if element-1 == result[i].last! {
result[i].append(element)
} else {
result.append([element])
i += 1
}
}
return result
}
}
let myArray = [0,1,2,4,7,8]
let grouped = myArray.grouped() // [[0, 1, 2], [4], [7, 8]]
这是你要求的算法,因此有十几种不同的方法可以做到这一点。由于您将不得不遍历数组的内容以找到缺少的整数,因此我只需创建一个数组并在其中随附数字,然后每当您遇到间隙时创建一个新数组。
您可能需要针对您可能遇到的任何特殊情况进行调整。 “这总是从0开始向正方向移动吗?”等等
试试这个:
func splitByMissingInteger(array: [Int]) -> [[Int]]? {
var arrayFinal :[[Int]] = [ [Int]() ]
var i = 0
for num in array{
if arrayFinal[i].isEmpty || (arrayFinal[i].last == nil){
arrayFinal[i].append(num)
} else if num == (arrayFinal[i].last! + 1){
arrayFinal[i].append(num)
} else {
i += 1
arrayFinal.append([Int]())
arrayFinal[i].append(num)
}
}
return arrayFinal
}