如何将Range转换为Array
我尝试过:
let min = 50
let max = 100
let intArray:[Int] = (min...max)
收到错误:Range<Int>无法转换为[Int]
我也尝试了:
let intArray:[Int] = [min...max]
和
let intArray:[Int] = (min...max) as [Int]
他们也不起作用。
Range<Int>
创建一个 Array<Int>,而不是进行强制转换。let intArray: [Int] = Array(min...max)
let intArray = [Int](min...max)
我想通了:
let intArray = [Int](min...max)
将荣誉归于他人。使用map
let min = 50
let max = 100
let intArray = (min...max).map{$0}
做:
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)
也就是说,你可以只使用文字。
range()
的解释造成的。 - devforfulet 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)
}
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