我正在Ruby中实现团队分配算法,现在我要实现一些功能,在该功能中,当提供学生ID对的列表时,这些学生应分组在一起。实现该目标的最有效结构是什么?我在考虑哈希,其中的关键是学生ID,值是一个数组,其中包含该特定学生无法分组的所有学生的ID。例如,如果csv具有以下内容
3,4
3,6
3,8
4,7
4,1
5,2
具有以下哈希值:
{3=>[4,6,8], 4 =>[7,1], 5 =>[2]}
但是,我想不出一种有效的方法来用来自csv文件的信息填充哈希(csv文件每行有两个值)。此后最重复的操作是检查给定学生的禁忌人列表中是否存在给定ID。
非常感谢
require 'CSV'
csv_string = %q(3,4
3,6
3,8
4,7
4,1
5,2 )
csv = CSV.parse(csv_string)
keys = csv.map(&:first).uniq
keys.map {|k| { k => csv.select{|a| a[0] == k}.compact.map(&:last) }}
=>[{"3"=>["4", "6", "8"]}, {"4"=>["7", "1"]}, {"5"=>["2 "]}]
但是请记住,CSV会读取字符串数据,但是如果您需要所有整数:
res = keys.map {|k| { k.to_i => csv.select{|a| a[0] == k}.compact.map(&:last).map(&:to_i) }}