2010-12-07 59 views
3

我有兩個散列數組。對哈希鍵是不同的:如何將來自兩個不同散列數組的值添加到一起?

player_scores1 = [{:first_name=>"Bruce", :score => 43, :time => 50}, 
        {:first_name=>"Clark", :score => 45, :minutes => 20}] 

player_scores2 = [{:last_name=>"Wayne", :points => 13, :time => 40}, 
        {:last_name=>"Kent", :points => 3, :minutes => 20}] 

我想創建哈希值加起來的一個新的數組:得分和:分在一起,並將其分配給一個名爲鍵:得分。我還想合併:first_name和:last_name,並將其分配給名爲full_name的鍵。我想丟棄任何其他鍵。

這將導致該數組中:

all_players = [{:full_name => "Bruce Wayne", :score => 56}, 
       {:full_name => "Clark Kent", :score => 48}] 

有一種優雅的方式來做到這一點?

回答

8

事情是這樣的:

player_scores1.zip(player_scores2).map { |a,b| 
    { 
     :full_name => a[:first_name]+' '+b[:last_name], 
     :score => a[:score]+b[:points] 
    } 
} 
0

你要找的代碼是:

final = [] 
player_scores1.each_index do |index| 
    entry_1 = player_scores1.values(index) 
    entry_2 = player_scores2.values(index)[:first_name] 
    score = entry_1[:score] + entry_2[:points] 
    final << {:full_name => "#{entry_1[:first_name]} #{entry_2[:last_name]}", :score => score } 
end 

收緊這件事任何建議,將不勝感激!

+0

將這項工作,如果使用不同的密鑰? – Chanpory 2010-12-07 23:00:48

+0

剛剛嘗試過,並且出現錯誤:`「NoMethodError:undefined method'merge'for# \t from(irb):15 」` – Chanpory 2010-12-07 23:02:38

+0

剛剛重讀了這個問題 - 我的回答錯了,讓我重做東西。 – 2010-12-07 23:02:43

0

這工作。我不這樣說,雖然這很優雅。

player_scores1 = [{:first_name=>"Bruce", :score => 43, :time => 50}, 
        {:first_name=>"Clark", :score => 45, :minutes => 20}] 

player_scores2 = [{:last_name=>"Wayne", :points => 13, :time => 40}, 
        {:last_name=>"Kent", :points => 3, :minutes => 20}] 

p (0...[player_scores1.length, player_scores2.length].min).map {|i| { 
    :full_name => player_scores1[i][:first_name] + " " + player_scores2[i][:last_name], 
    :score => player_scores1[i][:score] + player_scores2[i][:points] 
}} 

這個例子在Codepad

0

這使用zip超過哈希塊循環,加入名和總結:

all_players = [] 
player_scores1.zip(player_scores2) { |a, b| 
    all_players << { 
    :full_name => a[:first_name] + ' ' + b[:last_name], 
    :score  => a[:score] + b[:points] 
    } 
} 
all_players # => [{:full_name=>"Bruce Wayne", :score=>56}, {:full_name=>"Clark Kent", :score=>48}] 
相關問題