#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)