swift 将 Range<Int> 转换为 [Int]

swift convert Range<Int> to [Int]

如何将范围转换为数组

我试过了:

let min = 50
let max = 100
let intArray:[Int] = (min...max)

得到错误Range<Int> is not convertible to [Int]

我也试过:

let intArray:[Int] = [min...max]

let intArray:[Int] = (min...max) as [Int] 

它们也不起作用。

我想通了:

let intArray = [Int](min...max)

赞扬他人。

您需要使用 Range<Int> 创建 一个 Array<Int> 而不是 casting 它。

let intArray: [Int] = Array(min...max)

使用map

let min = 50
let max = 100
let intArray = (min...max).map{[=10=]}

将Range放入init.

let intArray = [Int](min...max)

做:

let intArray = Array(min...max)

这应该可以工作,因为 Array 有一个采用 SequenceType 的初始化程序并且 Range 符合 SequenceType.

有趣的是你不能(至少,Swift 3 和 Xcode 8)直接使用 Range<Int> 对象:

let range: Range<Int> = 1...10
let array: [Int] = Array(range)  // Error: "doesn't conform to expected type 'Sequence'"

因此,如前所述,您需要手动 "unwrap" 您的范围如下:

let array: [Int] = Array(range.lowerBound...range.upperBound)

即,您可以仅使用文字。

因为Swift3/Xcode8有一个CountableRange类型,可以派上用场:

let range: CountableRange<Int> = -10..<10
let array = Array(range)
print(array)
// prints: 
// [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

可以直接在for-in循环中使用:

for i in range {
    print(i)
}

您可以在这样的函数中使用 reduce() 实现 ClosedRange 和 Range 实例间隔。

func sumClosedRange(_ n: ClosedRange<Int>) -> Int {
    return n.reduce(0, +)
}
sumClosedRange(1...10) // 55


func sumRange(_ n: Range<Int>) -> Int {
    return n.reduce(0, +)
}
sumRange(1..<11) // 55