递归函数没有破坏

时间:2018-05-14 18:13:45

标签: arrays swift recursion

每当我在特定列中找到不同的值时,我想迭代2D数组并生成子数组。例如:

TEST <----- This value should be ignored. Start counting at index 1.
A
A
A
-------- split here --------
B
B
B
-------- split here --------
C
-------- split here --------

这导致3个阵列。

  1. array1:[A,A,A]
  2. array2:[B,B,B]
  3. array3:[C]
  4. 我对这个问题的解决方案是采用2D数组的递归方法:

    static func splitArray(fromArray array: [[String]], startIndex: Int = 1) {
        for x in startIndex..<array.count {
            if array.indices.contains(x+1)  {
                if (array[x][7]) != array[x+1][7] {
                    splitArray(fromArray: array, startIndex: x+1)
                }
            } else {
                break
            }
        }
    }
    

    在此方法中,我执行以下操作:

    1. 从索引1开始遍历数组。
    2. 将当前索引与下一个索引进行比较。如果下一个索引具有不同的值,则拆分数组(如果不是继续迭代)。
    3. 为了防止数组越界,我检查是否有下一个索引 - 如果没有下一个索引中断该方法(一旦整个数组被迭代就应该调用)
    4. 额外信息:

      1. 幻数7是我要迭代的2D数组中的列。
      2. 该方法确实达到了break命令..但不知何故,它会在方法中跳回,尽管它不会被递归的splitArray调用调用。
      3. 此方法尚未创建子数组,因为此时的逻辑已被破坏。
      4. 为什么我的功能没有破坏?它确实做了它的工作 - 它正确地分裂但是当它不应该时它重新开始。

        P.S:如果有任何编码建议我会非常感激,我觉得这个代码一般都不好。

1 个答案:

答案 0 :(得分:0)

解决了它:

static func split(_ array: [[String]], startIndex: Int = 1) {
    for x in startIndex..<array.count {
        if array.indices.contains(x+1)  {
            if (array[x][7]) != array[x+1][7] {
                split(array, startIndex: x+1)
                break
            }
        }
    }
}

“修复”是在调用递归函数后包含中断。我想在调用split之后for循环恢复了。