如何使用 if 方法添加到数组



我有一个这样的数字数组...

a= [28, 67, 20, 38, 4, 39, 14, 84, 20, 64, 7, 24, 17, 8, 7, 6, 15, 52, 4, 26]
我需要检查每个数字是否大于 30,

如果是,那么我想计算该数字并计算有多少个数字大于 30。我有这个,但到目前为止它不起作用

def late_items
    total_late = []
     if a.map { |i| i > 30}
      total_late << i
     end
    self.late_items = total_late.count
end

可以向 count 方法传递一个块来指定应计算的元素类型。块返回falsenil的元素将被忽略。

在您的情况下,它将归结为:

array.count { |element| element > 30 }
您可以使用

select获取所有大于 30 的元素。

a.select{|b| b > 30}.count
# => 6 

Is 在 Ruby 中要简单得多:

a = [28, 67, 20, 38, 4, 39, 14, 84, 20, 64, 7, 24, 17, 8, 7, 6, 15, 52, 4, 26]
a.select{ |e| e > 30 }

似乎您还需要超过 30 的每个项目的索引,如果是这种情况,这将起作用:

a= [28, 67, 20, 38, 4, 39, 14, 84, 20, 64, 7, 24, 17, 8, 7, 6, 15, 52, 4, 26]
count = 0
pos = []
a.each_with_index do |num, i|
    if num > 30
        count += 1
        pos << i
    end
end
puts count
print pos
#=> 6 [1,3,5,7,8,17]

您也可以检查inject方法。在其中,您可以轻松获得大于 30 的数字总和:

a.inject(0) { |sum, n| n > 30 ? sum += n : sum }

或者,如果您有一个大于 30 的数字数组,则可以使用 reduce 来汇总其项目。在a变量中,它看起来像:

a.select{ |n| n > 30 }.reduce(&:+)

最新更新