【问题标题】:Compare two arrays of Double Swift 4比较 Double Swift 4 的两个数组
【发布时间】:2018-01-24 10:05:07
【问题描述】:

有两个双精度数组,我想比较它们并创建一个具有差异结果的新数组,但不知道如何为此创建一个循环。请指教。

此处的数组示例:

 var freshRates = [1.6,1.7,2.0]
 var oldRates = [1.5,1.4,1.9]
 var difference: [Double] = []

【问题讨论】:

  • 比较 stackoverflow.com/questions/39724115/… 以获取具有不同解决方案的类似问题。 – 在你的情况下,这将是 let difference = zip(freshRates, oldRates).map(-)
  • 感谢您提供的信息,只是第一次没有找到关键字。

标签: arrays swift compare double


【解决方案1】:

压缩数组得到一个元组数组,然后使用 map 计算每对的差异:

var freshRates = [1.6,1.7,2.0]
var oldRates = [1.5,1.4,1.9]
var difference: [Double] = zip(freshRates, oldRates).map({ $0.0 - $0.1 })

【讨论】:

  • 再次感谢@Milan 的解决方案,非常感谢您对我的项目的帮助,只有一个问题,之后可以减少数量。因为现在在打印中它给出了结果 [0.10000000000000009, 0.30000000000000004, 0.10000000000000009]
  • @Ula:这在stackoverflow.com/questions/40959254/… 中有解释(这是关于字典中的浮点数,但也适用于数组)。基本原因是0.1不能完全表示为二进制浮点数。另请参阅stackoverflow.com/questions/588004/…
  • @Ula 我正要回复,当 Martin R 评论时 - 所以只需阅读链接的答案。你会在let result: Double = 1.6 - 1.5.. 中得到相同的结果。打印它的原因是打印整个数组的结果,如果你只打印difference[0],它将打印0.1 - 我不确定为什么数组的字符串描述呈现这样的
  • @MilanNosáľ:那是因为打印数组(或字典)使用debugPrint() 打印其元素,比较stackoverflow.com/a/40959459
  • 感谢两位对此问题的支持。
【解决方案2】:
var freshRates = [1.6,1.7,2.0]
var oldRates = [1.5,1.4,1.9]
var difference: [Double] = []

for (val1,val2) in zip(freshRates, oldRates){
    difference.append(val2 - val1)
}

debugPrint(difference)

【讨论】:

  • 感谢您回答这个解决方案也很完美。
猜你喜欢
  • 1970-01-01
  • 2019-02-02
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
相关资源
最近更新 更多