Хеш в сгруппированный массив - PullRequest
3 голосов
/ 04 марта 2012

Я не очень разбираюсь в ruby, поэтому я изо всех сил пытаюсь отформатировать часть данных.

У меня есть этот хеш, который содержит несколько ключей с одинаковым значением, например:

{"key" => "value1", "key2" => "value2", "key3" => "value3", "key4" => "value1", "key5" => "value2" ..}

Я пытаюсь превратить это в массив, содержащий ключи, сгруппированные по значениям

 [["key","key4"],["key2","key5"],["key3"]]

Любая помощь будет оценена.

Ответы [ 3 ]

6 голосов
/ 04 марта 2012
new_hash = {}
hash.each do |key, value|
  new_hash[value] ||= []
  new_hash[value] << key
end
array = new_hash.values # => [["key", "key4"], ["key2", "key5"], ["key3"]]
3 голосов
/ 04 марта 2012
hash = {
  "key" => "value1",
  "key2" => "value2",
  "key3" => "value3",
  "key4" => "value1",
  "key5" => "value2"
}

hash.group_by { |key, value| value }.values.map { |pairs| pairs.map &:first }

# => [["key", "key4"], ["key2", "key5"], ["key3"]]
0 голосов
/ 04 марта 2012
hash.group_by{|k,v| v}.map{|k,v| v.reduce([]){|res,n| res << n.first}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...