有人可以解释一下在这种情况下'&'是如何工作的吗?



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

有人曾经向我展示了如何在数组中找到常见元素:

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

但我不明白"&amp在这个代码中,它是如何找到公共元素的?

为了回答它做了什么,我引用了Array#&:的文档

Set Intersection--返回一个新数组,该数组包含两个数组,不包括任何重复项。订单保留自原始数组。

关于它是如何实现的,我向您指出Array#&1:的rubinius实现

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略有不同。但它应该让你了解正在发生的事情。

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

最新更新