2013-08-04 92 views
-2

我有兩個數組,一個是二維的,另外一維爲:陣列在Ruby中比較on Rails的

array1 = [["San Francisco", 8], ["New York", 3], ["Madison", 2], ["Washington", 3], ["Tulsa", 3]] 

array2 = ["Durham", "Rochester", "New York", "Tulsa", "Kenner", "Washington", "Linton", "Kansas City", "San Francisco", "Madison"] 

我想陣列比較在兩個陣列城市名稱的存在,並顯示用戶總量爲在第一個數組(第二個元素)中給出,如果城市不在第一個數組中,則爲0。

輸出應該是這樣的:

Durham (0) 
Rochester (0) 
New York (3) 
Tulsa(3) 
Kenner (0) 
Washington (3) 
... 

我怎樣才能在Rails中實現這一目標?

編輯: 其實我已經嘗試array1-array2得到的差異和增加差異array1與第二個值0,但這並不適用於我。

在此先感謝。

+0

-1。問題不清楚。什麼賦予「塔爾薩(0)」? – sawa

+0

這顯然是一個錯誤,什麼與立即downvoting? – Anton

+0

你寫什麼來解決這個問題?因此,在您尋求代碼之前,SO會期待嘗試。見http://sscce.org/ –

回答

2

array1是一個完美的候選轉換爲哈希。

h=Hash[array1] 
array2.each{|city| puts "%s(%d)" % [city, h[city]||0] } 
+0

這不會提供與OP相同的輸出。 – sawa

+0

感謝您快速回答Anton!它在最後使用了'}'! – Lalu

+0

修復它爲後代。 – Anton

1

使用Array#assoc

array1 = [["San Francisco", 8], ["New York", 3], ["Madison", 2], ["Washington", 3], ["Tulsa", 3]] 
array2 = ["Durham", "Rochester", "New York", "Tulsa", "Kenner", "Washington", "Linton", "Kansas City", "San Francisco", "Madison"] 

mapping = Hash[array1] 
mapping.default = 0 
array2.each do |city| 
    puts "#{city} (#{mapping[city]})" 
end 
+0

這也工作!謝謝。 – Lalu

+0

在代碼審查中,我會要求從字符串插值中取出三元語句。使用'assoc'會減慢代碼的速度,因爲它會走過數組來找到目標。 –

+0

@theTinMan,感謝您的建議。我從代碼中刪除了'assoc',條件表達式。 – falsetru

0

我建議在看陣列的uniq和路口(&)。