有人可以解释'&'在这种情况下工作?

时间:2013-08-01 09:12:07

标签: ruby arrays

我发现很难找到这个问题的答案。

有人曾向我展示如何在数组中找到共同元素:

> colours1 = %w(red green blue)
> colours2 = %w(orange red black blue)
> colours1 & colours2
=> ["red", "blue"]

但我不明白'&'是什么在这段代码中,它是如何找到共同元素的?

2 个答案:

答案 0 :(得分:2)

因为它是这样定义的。 Array#&方法接受另一个数组并返回交集。

答案 1 :(得分:2)

要回答 ,我会引用the documentation of Array#&

  

Set Intersection - 返回包含常用元素的新数组   两个数组,不包括任何重复数组。订单保留   原始阵列。

关于如何它,我指向rubinius implementation of Array#& 1

def &(other)
  other = Rubinius::Type.coerce_to other, Array, :to_ary

  array = []
  im = Rubinius::IdentityMap.from other

  each { |x| array << x if im.delete x }

  array
end

仅使用each { |x| array << x if im.delete x } self(第一个数组)中的元素添加到返回的数组中,如果它们包含在other数组中。


1 请注意,c-ruby实现的东西与rubinius或jruby略有不同。但它应该让你知道发生了什么。