Ios 整数数组到范围数组

Ios 整数数组到范围数组,ios,arrays,swift,algorithm,sorting,Ios,Arrays,Swift,Algorithm,Sorting,我的任务: 我需要将数组划分为几个具有以下属性的数组: 每个子数组都是一个连续整数的范围。例如[1,2,3,4,5]将是[[1,5]] 当没有连续整数时,创建一个新的子阵列。例如[1,2,4,5]将是[1,2],[4,5] 例如: 如果我有这个整数数组-[0,1,5,6,3,7] 预期结果-[[0,1],[3],[5,7] 我已经试过了: let array: [Int] = [0, 1, 3, 4, 5, 6, 7] var group: [[Int]] = [] var temp: [In

我的任务: 我需要将数组划分为几个具有以下属性的数组:

  • 每个子数组都是一个连续整数的范围。例如
    [1,2,3,4,5]
    将是
    [[1,5]]

  • 当没有连续整数时,创建一个新的子阵列。例如
    [1,2,4,5]
    将是
    [1,2],[4,5]

  • 例如:

    如果我有这个整数数组-
    [0,1,5,6,3,7]

    预期结果-
    [[0,1],[3],[5,7]

    我已经试过了:

    let array: [Int] = [0, 1, 3, 4, 5, 6, 7]
    
    var group: [[Int]] = []
    var temp: [Int] = [Int]()
    
    for (index, element) in array.enumerated() {
        if index + 1 < array.count {
            let nextElement = array[index + 1]
            let step = nextElement - element
    
    //        temp.append(element)
    
            if(step) == 1 { // Until it's in range
                temp.append(element)
            } else { // One-by-one
                temp.append(element)
                group.append(temp)
    
                temp = [Int]()
                group.append([nextElement])
            }
        } else {
            print(index)
        }
    }
    
    print(group)
    
    let数组:[Int]=[0,1,3,4,5,6,7]
    变量组:[[Int]]=[]
    变量温度:[Int]=[Int]()
    对于数组中的(索引,元素)。枚举(){
    如果索引+1
    从我的代码中,我得到了这个结果-
    [[0,1],[3]]

    有一个API,:

    你想要什么还不清楚,你的例子模棱两可

    如果您想要一个范围数组

    let indexSet = IndexSet(array)
    let rangeView = indexSet.rangeView
    let group = rangeView.map { $0.indices.startIndex..<$0.indices.endIndex }
    
    有一个API:

    你想要什么还不清楚,你的例子模棱两可

    如果您想要一个范围数组

    let indexSet = IndexSet(array)
    let rangeView = indexSet.rangeView
    let group = rangeView.map { $0.indices.startIndex..<$0.indices.endIndex }
    

    这是我发现的最好的方法:

    let array: [Int] = [0, 1, 5, 6, 3, 7].sorted();
    
    var group: [[Int]] = []
    var temp: [Int] = [Int]()
    var lastElement: Int = -1;
    for (index, element) in array.enumerated() {
        if lastElement == -1 {
          temp.append(element);
        }
        else {
          if element - lastElement == 1 {
            temp.append(element);
          }
          else {
            group.append(temp);
            temp = [Int]();
            temp.append(element);
          }
        }
        lastElement = element;
    }
    if temp.count > 0 {
      group.append(temp);
    }
    
    print(group)
    

    这是我发现的最好的方法:

    let array: [Int] = [0, 1, 5, 6, 3, 7].sorted();
    
    var group: [[Int]] = []
    var temp: [Int] = [Int]()
    var lastElement: Int = -1;
    for (index, element) in array.enumerated() {
        if lastElement == -1 {
          temp.append(element);
        }
        else {
          if element - lastElement == 1 {
            temp.append(element);
          }
          else {
            group.append(temp);
            temp = [Int]();
            temp.append(element);
          }
        }
        lastElement = element;
    }
    if temp.count > 0 {
      group.append(temp);
    }
    
    print(group)
    

    这是我的解决办法。我使用两个迭代器,而不是手动管理索引。一种是向前跑,表示跑步的“开始”,另一种是向前跑,以找到跑步的“终点”

    我已经对代码进行了绅士化处理,可以处理任何
    序列
    (不仅仅是
    数组
    ),也可以处理任何
    可移动
    类型(定义
    距离(to:)
    ,不一定只是
    Int


    这是我的解决办法。我使用两个迭代器,而不是手动管理索引。一种是向前跑,表示跑步的“开始”,另一种是向前跑,以找到跑步的“终点”

    我已经对代码进行了绅士化处理,可以处理任何
    序列
    (不仅仅是
    数组
    ),也可以处理任何
    可移动
    类型(定义
    距离(to:)
    ,不一定只是
    Int


    你尝试的结果是什么?你有什么问题?请用您的问题的详细信息更新您的问题。@rmaddy我没有得到我需要的结果,这是我的结果:[[0,1],[3]]。好的,我会更新我的问题。对于[0,1,5,6,3,7],预期结果不应该是[0,1]、[3]、[5,7]?@F.Sviatoslav如果[0,1,2,3,4,5]的结果是[0,5],[0,1,3,5,6,7]那么[0,1,5,7]的结果应该是[0,1]、[3]、[5,7]。@F.Sviatoslav?您的问题仍然显示出相互冲突的要求。您尝试的结果是什么?你有什么问题?请用您的问题的详细信息更新您的问题。@rmaddy我没有得到我需要的结果,这是我的结果:[[0,1],[3]]。好的,我会更新我的问题。对于[0,1,5,6,3,7],预期结果不应该是[0,1]、[3]、[5,7]?@F.Sviatoslav如果[0,1,2,3,4,5]的结果是[0,5],[0,1,3,5,6,7]那么[0,1,5,7]的结果应该是[0,1]、[3]、[5,7]。@F.Sviatoslav?你的问题仍然显示出相互冲突的要求。不错,但我猜这是一个家庭作业问题,使用
    索引集
    是作弊。不错,但我猜这是一个家庭作业问题,使用
    索引集
    是作弊。