2013-07-20 2 views
1

Ruby class Hash имеет метод «инвертировать», который делает «разворот» между ключами и значениями и удаляет одинаковые ключи (в нашем случае его: «1 =>: a»). h = {a: 1, b: 2, c: 1} => {: a => 1,: b => 2,: c => 1} h.invert => {1 =>: c, 2 =>: b}Ruby, создающий функцию инвертирования Hash в Ruby

Как реализовать пользовательский метод хэша «c_invert», который вернет первую (не последнюю) пару дублированных ключей => значение? Exapmle:

> h = {a: 1, b: 2, c: 1} 
=> {:a=>1, :b=>2, :c=>1} 
> h.c_invert 
=> {1=>:a, 2=>:b} 

ответ

3
class Hash 
    def c_invert 
    Hash[to_a.reverse].invert 
    end 
end 

или

class Hash 
    def c_invert 
    Hash[to_a.reverse.map(&:reverse)] 
    end 
end 
+0

Савва, спасибо за быструю обратную связь! –

0
h = {:d =>1,:a=>1, :b=> 2, :c=>1} 
Hash[h.map(&:reverse).reverse] 
# => {1=>:d, 2=>:b} 

h = {a: 1, b: 2, c: 1} 
Hash[h.map(&:reverse).reverse] 
# => {1=>:a, 2=>:b}