尝试仅显示重复值

时间:2011-08-30 13:16:51

标签: ruby-on-rails ruby arrays ruby-on-rails-3

我试图只显示一个只包含名称的数组中的重复值。

例如,我的代码是:

  <%= s= arrayOfStuff %> 
  <%= t= arrayOfStuff.uniq %>

显示

["UK01USV005", "NJ08APP516", "NJ08MHF001", "UK01USV505", "NY01MHF0006", "UK01USV525", "UK01USV005", "NJ08APP515", "NJ08MHF002"]
["UK01USV005", "NJ08APP516", "NJ08MHF001", "UK01USV505", "NY01MHF0006", "UK01USV525", "NJ08APP515", "NJ08MHF002"]

所以,当我s-t时它应该给我重复的值,在这种情况下是UK01USV005,但是我得到的结果是一个空数组,显然看起来像这样:{{1} }。

任何想法为什么会这样?

4 个答案:

答案 0 :(得分:10)

arrayOfStuff.group_by {|e| e}.select { |k,v| v.size > 1}.keys

应该可以正常工作。

答案 1 :(得分:5)

你错了。

["a", "a", "a"] - ["a"]
#=> []

您可以在您的情况下尝试:

a.inject([]){|ar, item| b.include?(item) ? b.delete(item) : ar << item; ar}
#=> ["UK01USV005"]

或使用原始数组

arrayOfStuff.select{|item| arrayOfStuff.count(item) > 1}.uniq

答案 2 :(得分:1)

从数组中减去数组会删除 all 匹配的对象,而不仅仅是第一个。

参见简单测试:

[1,2,1] - [1] # => [2]

所以,如果你想扫描重复的值,你可以尝试group_by(因为lucapette设法建议更快); - )

答案 3 :(得分:-1)

您可以执行以下操作:

["UK01USV005", "NJ08APP516", "NJ08MHF001", "UK01USV505", "NY01MHF0006", "UK01USV525", "NJ08APP515", "NJ08MHF002"] && ["UK01USV005", "NJ08APP516", "NJ08MHF001", "UK01USV505", "NY01MHF0006", "UK01USV525", "UK01USV005", "NJ08APP515", "NJ08MHF002"]

=> ["UK01USV005", "NJ08APP516", "NJ08MHF001", "UK01USV505", "NY01MHF0006", "UK01USV525", "UK01USV005", "NJ08APP515", "NJ08MHF002"]

您在寻找哪个?