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中创建此功能?
答案 0 :(得分:4)
安装Marc-André LaFortune's backports gem:
具有1.9.2的Array#uniq
和Array#uniq!
的块版本。或者如果你不想要或者不需要整个东西,那么这些部件就相当孤立,所以你可以拿出你需要的部件:
https://github.com/marcandre/backports/blob/master/lib/backports/1.9.2/array.rb#L99
答案 1 :(得分:2)
很容易实现类似:
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