разделить хэш на хэши Ruby

#ruby #hash #key

#ruby #хэш #Клавиша

Вопрос:

Я новичок в Ruby

У меня есть хэш с большой коллекцией пар ключ => значение. Я хотел бы разделить этот хэш на хэши в зависимости от ключа.

 {..."LoopLabs "=>1, "Influanza "=>1, "Cleo Media "=>1, "Adento "=>1, "HireRadar "=>1, "FidorFactory "=>1, "Four Energy "=>1, "Liefery "=>5, "Weaveworks "=>1, "Gastrofix "=>1 }
  

Я ожидаю следующего результата:

 { label: "LoopLabs", values: [[1]] }
{ label: "Influanza", values: [[1]] }
{ label: "Liefery", values: [[5]] }
...
  

Спасибо за помощь!

Ответ №1:

Вы можете сделать что-то вроде этого:

 hash = {"LoopLabs "=>1, "Influanza "=>1, "Cleo Media "=>1, "Adento "=>1, "HireRadar "=>1, "FidorFactory "=>1, "Four Energy "=>1, "Liefery "=>5, "Weaveworks "=>1, "Gastrofix "=>1 }
hash.map {|k,v| {label: k, values: [[v]]}}
# => [{:label=>"LoopLabs ", :values=>[[1]]},
# {:label=>"Influanza ", :values=>[[1]]},
# {:label=>"Cleo Media ", :values=>[[1]]},
# {:label=>"Adento ", :values=>[[1]]},
# {:label=>"HireRadar ", :values=>[[1]]},
# {:label=>"FidorFactory ", :values=>[[1]]},
# {:label=>"Four Energy ", :values=>[[1]]},
# {:label=>"Liefery ", :values=>[[5]]},
# {:label=>"Weaveworks ", :values=>[[1]]},
# {:label=>"Gastrofix ", :values=>[[1]]}]
  

Ответ №2:

Общий способ добиться этого будет:

 hash.dup
    .group_by(amp;:shift)
    .map(amp;%i|label values|.method(:zip))
    .map(amp;:to_h)