如何范围转换成数组迅速转换范围<Int>为[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]
他们也不工作。
如何范围转换成数组迅速转换范围<Int>为[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]
他们也不工作。
您需要使用Range<Int>
而不是投至来创建的Array<Int>
。
let intArray: [Int] = Array(min...max)
我想通了:
let intArray = [Int](min...max)
给予赞扬别人。
使用map
let min = 50
let max = 100
let intArray = (min...max).map{$0}
增加为什么它的作品将有利于阅读这类问题的人。例如,声明它创建了一个实现序列协议的CoutableClosedRange,因此映射是可能的,并且在执行映射操作时会产生一个新的int。 一些背景知识总是很好 – denis631
把范围在init。
let intArray = [Int](min...max)
做:
let intArray = Array(min...max)
这应该工作,因为Array
有一个初始化采取SequenceType
和Range
符合SequenceType
。
有趣的是你不能(至少与夫特3和Xcode中8)直接使用Range<Int>
对象:
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和Countable Range之间的区别在于后者可以通过Integer值迭代。出于这个原因,可数范围是一个快速收集类型,但范围不是。 –
这是对的,我并不期待这个,即两个不同的范围类别。可能是由于范围()的Pythonic解释。 – devforfu
由于夫特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)
}
这是(现在)处理任务的正确方法。也适用于Swift 4。 – Ash
感谢,我只是想通它虽然你发送你的答案 –