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

时间:2015-08-19 18:44:08

标签: ios arrays swift int range

如何将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] 
他们也没有工作。

8 个答案:

答案 0 :(得分:145)

您需要使用Array<Int>而不是强制转换创建 {/ 1}}。

Range<Int>

答案 1 :(得分:29)

将范围放入init。

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

答案 2 :(得分:13)

我明白了:

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

给予其他人信用。

答案 3 :(得分:12)

做的:

public struct Times {
    private var times = Set<Int>()
    mutating func addTimeRange(openTime: Int, closeTime: Int) {
        (openTime ..< closeTime).map({ index -> Void in self.times.insert(index) })
    }
}

let t1 = Times()
var t2 = t1
t2.addTimeRange(0, closeTime: 3)

println(t1.times) // []
println(t2.times) // [2, 0, 1]

这应该有效,因为let intArray = Array(min...max) 有一个初始值设定项,ArraySequenceType符合Range

答案 4 :(得分:8)

使用static void Main() { AnotherClass a = new AnotherClass(); try { a.Say(); } finally { if (a != null) { ((Idisposable)a).Dispose(); } } }

map

答案 5 :(得分:2)

有趣的是你不能(至少使用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'"

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

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

即,你只能使用文字。

答案 6 :(得分:1)

由于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)
}

答案 7 :(得分:0)

您可以在此类函数中使用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