2013-08-04 49 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和路口(&)。