Int数组的数组.仅按顺序存储重复项

Sha*_*ank 9 arrays algorithm ios swift

我需要为有序重复项存储一个Int数组数组(在数组中).

例:

  • 给定数组:
    mainArray = [7, 7, 3, 2, 2, 2, 1, 7, 5, 5]

现在我需要创建一个int数组的2D数组.
例:

Array [][] = [
               [7, 7], 
               [3], 
               [2, 2, 2], 
               [1], 
               [7],
               [5, 5]
             ]
Run Code Online (Sandbox Code Playgroud)

这是我有的:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*tti 8

您可以使用该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
}
Run Code Online (Sandbox Code Playgroud)

减少如何工作?

reduce确实将闭包中的逻辑应用于一个空的二维数组([[Int]])和第一个榆树numbers.

然后它再次应用于前一次迭代的结果和第二个整数数组......依此类推.

关闭会发生什么?

if会检查添加到结果的最后一个数组中的号码是否等于当前检查的整数.如果是,则将整数添加到该数组.

否则,将仅将包含新整数的新数组添加到结果中.

测试

[[7, 7], [3], [2, 2, 2], [1], [7], [5, 5]]
Run Code Online (Sandbox Code Playgroud)