我有一个Ruby嵌套数组,如下所示:
arr = [["Red", 2], ["Red", 1], ["Yellow", 0], ["Yellow", 2], ["Blue", 1]]
我正试图找到一种方法,将类似项目的数字(这是每个迷你数组中的第二个项目(相加,生成一个嵌套数组,如下所示:
[["Red", 3], ["Yellow", 2], ["Blue", 1]]
我试过循环和if语句,但我不知道该怎么做
对于非嵌套数组,您可以只使用if
和.includes?
,但我不知道如何使用嵌套数组。
有没有Ruby奇才能指引我朝着正确的方向前进?
请注意,这不是一个数组,也不是有效的ruby
["Red", 3], ["Yellow", 2], ["Blue", 1]
无论如何,试试这个
arr.group_by { |color, amount| color }
.map { |k, color_arr| [k, color_arr.map(&:last).inject(:+)] }
=> [["Red", 3], ["Yellow", 2], ["Blue", 1]]
或从ruby 2.4.0及以上
arr.group_by { |color, amount| color }
.map { |k, color_arr| [k, color_arr.map(&:last).sum] }
arr.each_with_object(Hash.new(0)) {|(col,nbr),h| h[col] += nbr}.to_a
#=> [["Red", 3], ["Yellow", 2], ["Blue", 1]]
注意中间计算:
arr.each_with_object(Hash.new(0)) {|(col,nbr),h| h[col] += nbr}
#=> {"Red"=>3, "Yellow"=>2, "Blue"=>1}
请参见哈希::new。