web-dev-qa-db-fra.com

swift convertir la plage <Int> en [Int]

comment convertir une plage en tableau

J'ai essayé:

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

obtenir une erreur Range<Int> is not convertible to [Int]

J'ai aussi essayé:

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

et

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

ils ne travaillent pas non plus.

80
haitham

Vous devez créer un Array<Int> en utilisant le Range<Int> plutôt que cast.

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

Mettez la gamme dans l'init.

let intArray = [Int](min...max)
32
Mr Beardsley

faire:

let intArray = Array(min...max)

Cela devrait fonctionner car Array a un initialiseur prenant un SequenceType et Range conforme à SequenceType.

13
ad121

Je l'ai compris:

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

Donner crédit à quelqu'un d'autre.

13
haitham

Utilisez map

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

Intéressant que vous ne puissiez pas (du moins, avec Swift 3 et Xcode 8), utilisez Range<Int> objet directement:

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

Par conséquent, comme il a été mentionné précédemment, vous devez manuellement "décompresser" votre gamme, comme suit:

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

C'est-à-dire que vous pouvez utilisez uniquement le littéral.

2
devforfu

Depuis Swift 3/Xcode 8, il existe un type CountableRange qui peut être pratique:

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]

Il peut être utilisé directement dans les boucles for-in:

for i in range {
    print(i)
}
1
killobatt

Vous pouvez implémenter des intervalles d'instance ClosedRange & Range avec une réduction () dans des fonctions comme celle-ci.

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
0
tymac