我试图只显示一个只包含名称的数组中的重复值。
例如,我的代码是:
<%= 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} }。
任何想法为什么会这样?
答案 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"]
您在寻找哪个?