Я хотел бы использовать:
a=["joe","mark","mark","wilson","joe"]
b=[1,2,2,3,4]
a.zip(b).group_by{ |i,j| i }.map{ |k, v| [k, v.map(&:last)] }.to_h
# => {"joe"=>[1, 4], "mark"=>[2, 2], "wilson"=>[3]}
Если вы не на Ruby, 2.1+, вы не будете иметь Array#to_h
так, вместо этого, вы можете сделать:
Hash[a.zip(b).group_by{ |i,j| i }.map{ |k, v| [k, v.map(&:last)] }]
# => {"joe"=>[1, 4], "mark"=>[2, 2], "wilson"=>[3]}
Вот что это делают в некоторых промежуточных шагов:
a.zip(b) # => [["joe", 1], ["mark", 2], ["mark", 2], ["wilson", 3], ["joe", 4]]
a.zip(b).group_by{ |i,j| i } # => {"joe"=>[["joe", 1], ["joe", 4]], "mark"=>[["mark", 2], ["mark", 2]], "wilson"=>[["wilson", 3]]}
a.zip(b).group_by{ |i,j| i }.map{ |k, v| [k, v.map(&:last)] } # => [["joe", [1, 4]], ["mark", [2, 2]], ["wilson", [3]]]
звезда шоу здесь group_by
, который собирает все Ele которые соответствуют заданным критериям, в этом случае все элементы массива, соответствующие данному имени. Как только они сгруппированы, это просто случай очистки результирующего массива и преобразования его в хэш.
На каком основании «joe» присвоено 1,4, отметка 2, 2 и т. Д.? – daremkd
@daremkd Это набор данных, который у меня есть, к сожалению, я не участвовал в создании данных.Но как это будет иметь отношение к проблеме здесь? –
как вы строите хэш, не зная, как связаны два массива. На каком основании вы бы построили значения для ключа «joe»? – usha