2012-02-21 3 views
3

У меня есть хэш, как это:Сбор хэш-ключей на основе сравнения значений

h={ 
    :p1 => [:c1,:c2], 
    :p2 => [:c3,:c4], 
    :p3 => [:c1,:c5], 
    :p4 => [:c3,:c2], 
    :p5 => [:c6,:c7] 
} 

я хотел бы найти хорошую функцию Ruby, которая возвращает массив массивов, как это:

res=[[:p1,:p3],[:p2,:p4]] 

Каждая подматрица состоит из хеш-ключей, первые ассоциированные значения которых равны: :p1 и :p3 имеют :c1 в качестве стартовой величины и :p2 и :p4 имеют :c3.

ответ

5

Как это?

h.keys.group_by {|k| h[k][0]} 
# => {:c1=>[:p1, :p3], :c3=>[:p2, :p4], :c6=>[:p5]}