整个数组从int转换为double,以便进行一些算术运算

时间:2014-12-27 14:30:48

标签: arrays swift integer double typecast-operator

我有这段代码:

    var arrayIntegers : [Int] = []
    arrayIntegers += 0...33
    var arrayDecimal : [Int] = []
    arrayDecimal += 0...999

问题是我无法将两个数组的值都转换为Double。我想要做的是获得一个带有复合值的新数组(称为arrayDoubleComposed),将arrayIntegers的值作为整数部分,然后将另一个arrayDecimal值作为浮动部分。

当我试图对此进行类型转换时:

    var arrayDoubleComposed : [Double] = []
    arrayDoubleComposed = Double (arrayIntegers[] + (arrayDecimal[])/1000)

我收到了一个错误消息。如果我压制[]。

也一样

我有点新人,我知道......

1 个答案:

答案 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编译器出现一些魔法时。