小编典典

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

algorithm

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

例:

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

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

Array [][] = [
               [7, 7], 
               [3], 
               [2, 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
    }
}

阅读 203

收藏
2020-07-28

共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 numbers

然后将其再次应用于上一次迭代的结果和第二个整数数组…等等。

关闭会发生什么?

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

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

测试

[[7, 7], [3], [2, 2, 2], [1], [7], [5, 5]]
2020-07-28