Skip to content

Instantly share code, notes, and snippets.

@nubbel
Last active July 4, 2023 13:00
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save nubbel/d5a3639bea96ad568cf2 to your computer and use it in GitHub Desktop.
Save nubbel/d5a3639bea96ad568cf2 to your computer and use it in GitHub Desktop.
protocol ArrayRepresentable {
typealias ArrayType
func toArray() -> ArrayType[]
}
extension Range : ArrayRepresentable {
func toArray() -> T[] {
return T[](self)
}
}
(1..5).toArray() // => [1, 2, 3, 4]
(-2.0..2.0).toArray() // => [-2.0, -1.0, 0.0, 1.0]
func toArray<S : Sequence>(seq: S) -> Array<S.GeneratorType.Element> {
return Array<S.GeneratorType.Element>(seq)
}
toArray(1..5) // => [1, 2, 3, 4]
toArray(-2.0..2.0) // => [-2.0, -1.0, 0.0, 1.0]
@Gerst20051
Copy link

Thanks @RomanVolkov was just about to post that same thing.

@noamtamim
Copy link

noamtamim commented May 7, 2017

I found this to be the best option in Swift 3:

Array(0...3)    // [0,1,2,3]
Array(0..<3)    // [0,1,2]

@honghaoz
Copy link

honghaoz commented Sep 1, 2020

import Foundation

public extension Range where Bound: Strideable, Bound.Stride: SignedInteger {

  /// Convert to an array.
  func asArray() -> [Bound] {
    Array(self)
  }
}

public extension ClosedRange where Bound: Strideable, Bound.Stride: SignedInteger {

  /// Convert to an array.
  func asArray() -> [Bound] {
    Array(self)
  }
}

public extension Sequence {

  /// Convert to an array.
  func asArray() -> [Iterator.Element] {
    Array(self)
  }
}
(1 ..< 4).asArray() // [1, 2, 3]
(1 ... 4).asArray() // [1, 2, 3, 4]
zip([1, 2, 3], ["a", "b", "c"]).asArray() // [(1, "a"), (2, "b"), (3, "c")]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment