删除"子集"来自Ruby中的数组

时间:2014-12-05 14:23:51

标签: ruby-on-rails ruby arrays arraylist

我想从另一个数组中包含的数组中删除一些元素。

在Java中执行此操作的方法是:

myArray.removeAll(anotherArray)

此代码会从anotherArray中删除myArray中包含的元素。

是否有从myArray删除anotherArray INTERSECTION myArray中包含的元素的内容?

2 个答案:

答案 0 :(得分:8)

是的,这是the - operator(真正Array#-方法)的用途:

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

答案 1 :(得分:0)

使用"数组差异"

在Ruby中有多种方法可以做到这一点,但最常见的是调用数组差异方法Array#-。该方法的文档说:

  

返回一个新数组,该数组是原始数组的副本,删除也出现在other_ary中的所有项。订单将从原始数组中保留。

     

它使用hash和eql来比较元素?提高效率的方法。

[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]  #=>  [ 3, 3, 5 ]
     

如果您需要类似集合的行为,请参阅库类Set。

减号看起来像一个运算符,但实际上是对第一个Array对象的方法调用。显然,如果你正在使用Set对象而不是数组,你也可以查看Set#difference