Ruby数组减法?

时间:2013-12-16 22:42:00

标签: ruby arrays

我不明白从数组中减去数组时会发生什么,或者这里有什么问题。

我所拥有的是数组中的用户名(字符串)列表:

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}

2 个答案:

答案 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) }