Pit Capitain wrote:

> Trans schrieb:
> 
>> Has anyone, could anyone, write a Ruby version of this method? I'm not
>> sure what its supposed to do exaclty. Id like to see source.
> 
> No problem:
> 
>   require 'set'
> 
>   class Array
>     def uniq_by
>       result = []
>       values = Set.new
>       each do |elem|
>         value = yield elem
>         unless values.include? value
>           values << value
>           result << elem
>         end
>       end
>       result
>     end
>   end
> 
>   p ( 0 .. 9 ).to_a.uniq_by { |x| x % 4 }  # => [0, 1, 2, 3]
> 
> I bet Robert will transform this into a version using inject ;-)

module Enumerable
   def uniq_by()
     inject([]) do |state, item|
       value = yield(item)
       state.include?(value) ? state : state + [item]
     end
   end
end