gpt4 book ai didi

arrays - Ruby:比较数组并根据特定条件创建新数组

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:44 25 4
gpt4 key购买 nike

我有 3 个等长的数组。有些点是零,这使事情变得复杂,但我需要保留它们的顺序。

a = [5.2, 3.0, 1.21, 7.0, 5.0, 5.0, 6.0, 8.0, 10.0, 10.0]
b = [nil, nil, [{"price"=>1.99, "size"=>269.897475661239}], nil, nil, nil, nil, nil, nil, nil]
x = [6.0, 6.2, 2.5, 5.0, 9.0, 2.36, 15.5, 20.0, nil, nil]

(第一步,我想遍历 b 以便 b = [nil, nil, 1.99, nil, nil, nil, nil, nil, nil, nil]。只需要 ["price"],忽略 ["size"]。无法弄清楚。)

第二步,我想创建一个新数组 (c) 来计算 ab 的平均值,但是在没有 nil 的地方,只取有值的那个。换句话说,c= [5.2, 3.0, 1.6, 7.0, 5.0, 5.0, 6.0, 8.0, 10.0, 10.0] 看起来像 a 除了第三点的平均值为 1.21 和 1.99 (1.6)。

所以我有了我原来的第三个数组 x = [6.0, 6.2, 2.5, 5.0, 9.0, 2.36, 15.5, 20.0, nil, nil]第三步,我想比较cx 并创建一个新数组z,它采用SMALLER*两个数字中的一个,或者如果为零,则为具有值的那个。 z 是我想要的结果。

因此 z 应该 = [6.0, 6.2, 2.5, 7.0, 9.0, 5.0, 15.5, 20.0, 10.0, 10.0](如果我的眼睛是正确的)。 (*编辑:我的意思是两个数字中较大的一个,这就是为什么这个数组与下面的答案不匹配,所以我在下面使用了那个答案但使用了 .max .min )

我知道这些步骤很乏味,但我需要按这个顺序进行,因为我有很多数组,我需要取 2 的平均值,然后与第三个进行比较,取较大的数字,并在整个过程中加入随机 nil 值,它得到超出我的能力范围。无法弄清楚,非常感谢您的帮助!谢谢!

最佳答案

bb = b.map { |e| e.is_a?(Array) ? e.first["price"] : e }
#=> [nil, nil, 1.99, nil, nil, nil, nil, nil, nil, nil]

c = a.zip(bb).map { |ea, ebb| ebb.nil? ? ea : (ea+ebb)/2.0 }
#=> [5.2, 3.0, 1.6, 7.0, 5.0, 5.0, 6.0, 8.0, 10.0, 10.0]

c.zip(x).map { |cc,xx| xx.nil? ? cc : [cc,xx].min }
#=> [5.2, 3.0, 1.6, 5.0, 5.0, 2.36, 6.0, 8.0, 10.0, 10.0]

如果只需要 bb 和返回值,您可以执行以下计算。

[a,bb,x].transpose.map do |ae,bbe,xe|
ab_avg = bbe ? (ae+bbe)/2.0 : ae
xe ? [ab_avg, xe].min : ab_avg
end
#=> [5.2, 3.0, 1.6, 5.0, 5.0, 2.36, 6.0, 8.0, 10.0, 10.0]

关于arrays - Ruby:比较数组并根据特定条件创建新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40581317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com