我不明白从数组中减去数组时会发生什么,或者这里有什么问题。
我所拥有的是数组中的用户名(字符串)列表:
users.count - users.uniq.count # => 9
users - users.uniq # => []
我不确定这是怎么回事。
我基本上是想找到重复的列表。我意识到还有其他方法可以解决这个问题,只是想更好地理解阵列操作。
以下是我用来获得相同的解决方法代码:
users.inject(Hash.new(0)) {|h,i| h[i] += 1; h}.select{|k,v| v > 1}
答案 0 :(得分:7)
您可以使用
dups = users.select{|e| users.count(e) > 1 }.uniq
或者,只找到一个重复元素:
firstDup = users.detect {|e| users.count(e) > 1 }
关于数组减法,这可能会澄清:
a = [1, 1, 1, 1, 1]
a - [1] # => []
数组减法会删除所有出现,而不只是一个。
答案 1 :(得分:4)
Array#-的行为非常正确。它
返回一个新数组,它是原始数组的副本,删除任何数组 也出现在other_ary中的项目。
没有所有用户的用户列表(带有重复项)为空。
来自“Ruby: How to find and return a duplicate value in array?”,以下似乎擅长在数组中找到重复项:
users.detect {|e| users.rindex(e) != users.index(e) }