Наиболее эффективная структура данных для хранения списка запрещенных пар - PullRequest
0 голосов
/ 04 апреля 2020

Я реализую алгоритм распределения команды в Ruby, и я дошел до того, что мне нужно реализовать функциональность, где, когда предоставляется список пар идентификаторов студентов, эти студенты должны быть сгруппированы вместе.

Какая структура наиболее эффективна для реализации этого?

Я думал о Ха sh, где ключ - это идентификатор студента, а значение - массив, содержащий все идентификаторы студентов. конкретный студент не может быть сгруппирован с. Например, если файл CSV имеет следующее содержимое:

3,4
3,6
3,8
4,7
4,1
5,2 

Я хочу получить следующее: Ха sh:

{3=>[4,6,8], 4 =>[7,1], 5 =>[2]}

Однако я не могу придумать эффективный способ заполнить ха sh информацией из файла CSV. Файл имеет два значения в строке. Наиболее повторяющимся действием после этого будет проверка того, существует ли данный идентификатор в списках запрещенных партнеров для данного студента.

1 Ответ

2 голосов
/ 04 апреля 2020

Это должно работать для вас:

require 'CSV'

csv_string = %q(3,4
3,6
3,8
4,7
4,1
5,2 )

CSV.parse(csv_string, converters: :numeric)
   .group_by(&:first)
   .transform_values { |values| values.map(&:last) }
...