У меня есть следующий массив:
votes_array = [["2", "1"], ["2", "4"], ["4", "3"], ["3", "4"], ["1", "N"], ["3", "1"], ["1", "2"], ["4", "1"], ["0", "1"], ["0", "2"], ["1", "3"], ["1", "4"]]
И я хочу создать новый массив (или хэш), который будет хранить элементы voice_array по их первому варианту, чтобы новый массив выглядел так:
candidate_votes = [
{"id" => "0", "votes" => [["0", "1"],["0","2"]]},
{"id" => "1", "votes" => [["1", "N"],["1","2"],["1","3"],["1","4"]]},
etc,
etc]
Порядок голосов в ключе голосования не важен, просто все голоса разделены на соответствующие идентификаторы.
Я работаю со следующим кодом:
first_preferences = votes_array.map(&:first)
valid_candidates = first_preferences.uniq
valid_candidates.each do |candidate|
these_votes = votes_array.find_all { |i| i[0] == candidate }
candidate_votes << {"id" => candidate, "votes" => these_votes}
end
Но интересно, есть ли более элегантный, чище или Rubiyst способ?