我有这段代码:
var arrayIntegers : [Int] = []
arrayIntegers += 0...33
var arrayDecimal : [Int] = []
arrayDecimal += 0...999
问题是我无法将两个数组的值都转换为 Double。我想要做的是得到一个新数组(称为 arrayDoubleComposed),它具有复合值,将 arrayIntegers 的值作为整数部分,然后将 arrayDecimal 的另一个值作为浮点部分。
当我尝试对其进行类型转换时:
var arrayDoubleComposed : [Double] = []
arrayDoubleComposed = Double (arrayIntegers[] + (arrayDecimal[])/1000)
我有一个错误。如果我抑制 [] 也是一样。
我有点新人,我知道...
最佳答案
将一种数组转换为另一种数组是 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
处理此问题的方式是在第一个序列用完时停止,但这可能不是您想要的。
附言类似于您尝试过的类型转换,它转换数组的内容,仅在从 Objective-C 类型转换为 native Swift 类型的特殊情况下工作,当 Swift 编译器施展魔法时。
关于arrays - 将整个数组从 int 转换为 double 以进行一些算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27668187/