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 中创建此功能?
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 中创建此功能?
安装Marc-André LaFortune 的backports gem:
它具有 1.9.2Array#uniq
和Array#uniq!
. 或者,如果您不想要或不需要整个东西,那么这些部分就可以很好地隔离,因此您可以只取出您需要的部分:
https://github.com/marcandre/backports/blob/master/lib/backports/1.9.2/array.rb#L99
很容易实现类似的东西:
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