我有这段代码:
var arrayIntegers : [Int] = []
arrayIntegers += 0...33
var arrayDecimal : [Int] = []
arrayDecimal += 0...999
问题是我无法将两个数组的值都转换为Double。我想要做的是获得一个带有复合值的新数组(称为arrayDoubleComposed),将arrayIntegers的值作为整数部分,然后将另一个arrayDecimal值作为浮动部分。
当我试图对此进行类型转换时:
var arrayDoubleComposed : [Double] = []
arrayDoubleComposed = Double (arrayIntegers[] + (arrayDecimal[])/1000)
我收到了一个错误消息。如果我压制[]。
也一样我有点新人,我知道......
答案 0 :(得分:1)
将一种数组转换为另一种数组是map
的作业,它将一个函数应用于数组的每个元素,并将结果作为函数返回的类型的新数组返回。在这种情况下,您需要一个将Int
转换为Double
的函数。
尝试这样的事情:
let integers = Array(0...33)
let fractions = Array(0...999)
let arrayDoubleComposed = map(Zip2(integers, fractions)) {
(i, f) in
Double(i) + Double(f)/1_000
}
Zip2
采用两个序列并将它们配对 - 第一个元素组合在一起,第二个元素组合在一起等等。然后将其传递给map
,它将两个元素组合在一起。
(另请注意,您只需从范围初始化数组,而不是声明它们然后添加值)
目前尚不清楚你的意思,因为整数和小数数组的长度不同。 Zip2
处理此问题的方法是在第一个序列用完时停止,但这可能不是您想要的。
P.S。像你试过的那样转换,转换数组的内容,只有在从Objective-C类型转换为本机Swift类型时才会出现特殊情况,当Swift编译器出现一些魔法时。