I can initialize an array of Int
s in Swift 4 as follows:
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let intArray = Array(1...10)
If I specify the array as an array of Double
s like so:
let doubleArray1: [Double] = Array(1...100)
...the compiler says:
Cannot convert value of type 'Array' to specified type '[Double]'
If I try this:
let doubleArray1 = Array<Double>(1...100)
...the compiler says this...
Cannot invoke initializer for type 'Array' with an argument list of type '(CountableClosedRange)'
I got it to work using map
, as follows:
// [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
let doubleArrayMap = Array(1...10).map{Double($0)}
Is there a "cleaner" way to quickly initialize an array of Doubles
without using map
in Swift?
You can initialize an array from the sequence produced by stride()
:
let doubles = Array(stride(from: 1.0, through: 100.0, by: 1.0))
But keep aware of the restricted floating point precision: If the increment is not an integral value then rounding errors can accumulate. Mapping (and scaling) an integer range would then be the safer solution.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With