Ruby - 根据总和和对象类型对数组进行排序

use*_*773 0 ruby arrays object

我有一个数组数组,具有不同的对象类型,如果非整数乘以 2 的总和大于或等于整个数组的总和,我希望从数组数组中提取数组。例如:

elements = [
  [1, 2, "3", "4"],
  [1, "2", "3", 5],
  ["1", 2, 3, "4.0"],
  [1, 2, 3, 4, "5"],
  [1, 2, 3.0, 4.0, 5.0]
]

expected output:

elements = [
  [1, 2, "3", "4"],
  ["1", 2, 3, "4.0"],
  [1, 2, 3.0, 4.0, 5.0]
]
Run Code Online (Sandbox Code Playgroud)

由于字符串和浮点数之和大于或等于整数之和。

Ste*_*fan 5

您可以使用:

elements.select do |ary|
  ary.grep_v(Integer).sum(&:to_f) * 2 >= ary.sum(&:to_f)
end
#=> [[1, 2, "3", "4"], ["1", 2, 3, "4.0"], [1, 2, 3.0, 4.0, 5.0]]
Run Code Online (Sandbox Code Playgroud)

您也可以将to_f-call传递给grep_v,即ary.grep_v(Integer, &:to_f).sum但我更喜欢sum在双方都有相同的-calls。