3

Array#uniq在 Ruby 1.9 中有这种行为

c = [ "a:def", "a:xyz", "b:abc", "b:xyz", "c:jkl" ]
c.uniq {|s| s[/^\w+/]}  #=> [ "a:def", "b:abc", "c:jkl" ]

它可以占用一个块并就我们所提供的东西赋予独特的价值。但是,这在 Ruby 1.8 中不起作用。如何在 ruby​​ 1.8 中创建此功能?

4

2 回答 2

5

安装Marc-André LaFortune 的backports gem:

https://github.com/marcandre/backports

它具有 1.9.2Array#uniqArray#uniq!. 或者,如果您不想要或不需要整个东西,那么这些部分就可以很好地隔离,因此您可以只取出您需要的部分:

https://github.com/marcandre/backports/blob/master/lib/backports/1.9.2/array.rb#L99

于 2011-12-28T08:56:27.693 回答
3

很容易实现类似的东西:

class Array
    def uniq
        ret, keys = [], []
        each do |x|
            key = block_given? ? yield(x) : x
            unless keys.include? key
                ret << x
                keys << key
            end
        end
        ret
    end
end
于 2011-12-28T09:16:32.307 回答