代码之家  ›  专栏  ›  技术社区  ›  black_pearl

如何在swift中组合两个closedrange?

  •  0
  • black_pearl  · 技术社区  · 8 年前

    我正在学习快速排序,需要组成一个复杂的数组。

    代码如下:

    var arrayOne = 1...500
    var arrayTwo = 501...1000
    var array_one = arrayOne.reversed()
    var array_two = arrayTwo.reversed()
    var array = arrayOne + arrayTwo
    

    我想结合 arrayOne + arrayTwo array .

    我不能用 + 操作员,xcode提示我

    二元运算符“+”不能应用于两个 “CountableClosedRange”操作数

    我知道如何使用for循环获得它。

    真正需要优雅的方式。比如高阶函数。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Martin R    8 年前

    1...500 是一个 范围 (1...500).reversed() 是一个 收藏。 这两个都是序列,所以你可以 追加 它们到一个数组:

    let rangeOne = 1...500
    let rangeTwo = 501...1000
    
    let array = [] + rangeOne.reversed() + rangeTwo.reversed()
    
    // [500, 499, ..., 2, 1, 1000, 999, ..., 502, 501]
    

    其他解决方案包括:

    let array = Array(rangeOne.reversed()) + rangeTwo.reversed()
    let array = Array([rangeOne.reversed(), rangeTwo.reversed()].joined())
    let array = Array(rangeOne.reversed()) + Array(rangeTwo.reversed())
    let array = [rangeOne.reversed(), rangeTwo.reversed()].flatMap { $0 }