我需要存储一个Int数组的数组,用于有序重复(在Array中).
例:
>给定数组:
mainArray = [7,7,3,2,1,5,5]
现在我需要创建一个int数组的数组.
例:
Array [][] = [
[7,7],[3],[2,2],[1],[7],[5,5]
]
这是我有的:
for var i = 0; i < val.count; i++ {
var columnArray = Array<Int>()
for var j in 0...9 {
if oldNum == val[j]{
columnArray.append(val[j])
}
else {
array.append(columnArray);
//j += 1
break;
}
oldNum = val[j];
j += 1
}
}
解决方法
您可以使用reduce方法.
let result = numbers.reduce([[Int]]()) { (var result,num) -> [[Int]] in
if var lastSequence = result.last where lastSequence.first == num {
result[result.count-1].append(num)
} else {
result.append([num])
}
return result
}
减少工作如何?
reduce将封闭中的逻辑应用于空的2D数组的整数([[Int]])和数字的第一个elm.
然后再次应用上一次迭代的结果和第二个整数数组…等等.
封闭中发生了什么?
if是否检查在结果中添加的最后一个数组中的数字是否等于当前检查的整数.如果这样,那个整数被添加到该数组.
否则,只会添加一个仅包含新整数的数组.
测试
[[7,5]]