参数化数组#uniq(即uniq_by)

Tom*_*man 3 ruby arrays

如果不是从数组中删除重复元素,我想删除具有共同特定属性的元素,该怎么办?

具体来说,我想从具有重复"精华"的数组中删除所有字符串,其中精华定义如下:

class String
  def essence
    downcase.gsub('&', 'and').gsub(/[^a-z0-9]/, '')
  end
end
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

['a', 'A', 'b'].uniq_by(&:essence)
# => ['a', 'b'] (or ['A', 'b']; I don't really care)
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

ste*_*lag 10

从1.9.2开始,Array#uniq(和uniq!)需要一个块,因此不再需要uniq_by.

  • http://ruby-doc.org/core-1.9.2/Array.html#method-i-uniq证实了这一点. (2认同)