Ruby 1.8.7中与Array#uniq带块等效的方法是什么?

3
在Ruby 1.9中,Array#uniq方法的行为如此。
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中创建此功能?


你为什么想要使用Ruby 1.8?它即将过时。 - sawa
@sawa:也许他已经有一个使用1.8的项目,现在没有预算或时间来升级。 - mu is too short
或者他在一台不允许升级的机器上。 - the Tin Man
2个回答

5

啊啊..这是Marc在我之前的一个问题中提到的..我怎么会忘了呢..谢谢。 - rubyprince

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接