2013-12-16 143 views
3

要么我不明白当你从数组中减去一个数组或者在这里有什么错误时会发生什么。红宝石阵列减法?

我有什么是用户名(串)的阵列中的一个列表:

users.count - users.uniq.count # => 9 
users - users.uniq    # => [] 

我不知道这是怎么可能的。

我基本上试图找到重复的列表。我意识到还有其他方法可以解决这个问题,只是试图更好地理解Array操作。

下面是解决方法的代码我用来获取相同的:

users.inject(Hash.new(0)) {|h,i| h[i] += 1; h}.select{|k,v| v > 1} 

回答

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] # => [] 

Array subraction removal all发生,而不仅仅是一个。

4

Array#-的行为非常正确。它

返回一个新数组,它是原始数组的副本,删除任何也出现在other_ary中的 项。

没有所有用户的用户列表(带有重复项)为空。

从“Ruby: How to find and return a duplicate value in array?”的到来,下面似乎是善于在Array发现重复:

users.detect {|e| users.rindex(e) != users.index(e) }