迅速转换范围 < Int > 到[ Int ]

如何将 Range 转换为 Array

我试过:

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]

也不管用。

61361 次浏览

我想通了:

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

把功劳给了别人。

您需要使用 Range<Int>而不是 演员ing 创造Array<Int>

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

使用 map

let min = 50
let max = 100
let intArray = (min...max).map{$0}

将 Range 放入 init 中。

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

做:

let intArray = Array(min...max)

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

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

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

因此,正如前面提到的,您需要手动“展开”您的范围,如:

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

也就是说,你 可以只使用文字。

因为 Swift 3/Xcode 8有一个 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