ios - convertir rĂ¡pidamente Range<Int> a
arrays swift (8)
Cómo convertir Range a Array
Lo intenté:
let min = 50
let max = 100
let intArray:[Int] = (min...max)
obtener el
Range<Int> is not convertible to [Int]
error
Range<Int> is not convertible to [Int]
También probé:
let intArray:[Int] = [min...max]
y
let intArray:[Int] = (min...max) as [Int]
ellos tampoco funcionan.
Debe
crear
una
Array<Int>
utilizando el
Range<Int>
lugar de emitirlo.
let intArray: [Int] = Array(min...max)
Desde Swift 3 / Xcode 8 hay un tipo
CountableRange
, que puede ser útil:
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]
Se puede usar directamente en
for
-
in
loops:
for i in range {
print(i)
}
Es interesante que no pueda (al menos con Swift 3 y Xcode 8) usar el objeto
Range<Int>
directamente:
let range: Range<Int> = 1...10
let array: [Int] = Array(range) // Error: "doesn''t conform to expected type ''Sequence''"
Por lo tanto, como se mencionó anteriormente, debe "desenvolver" manualmente los rangos como:
let array: [Int] = Array(range.lowerBound...range.upperBound)
Es decir, solo puedes usar literal.
Me lo imaginé:
let intArray = [Int](min...max)
Dar crédito a alguien más.
Pon el rango en el init.
let intArray = [Int](min...max)
Puede implementar intervalos de instancia de ClosedRange & Range con reduce () en funciones como esta.
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
Usar
map
let min = 50
let max = 100
let intArray = (min...max).map{$0}
hacer:
let intArray = Array(min...max)
Esto debería funcionar porque
Array
tiene un inicializador que toma un
SequenceType
y
Range
ajusta a
SequenceType
.