最有效的数据结构针对禁止对的清单

问题描述 投票:0回答:1

我正在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。

非常感谢

ruby data-structures hash
1个回答
1
投票
这应该为您工作:

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

© www.soinside.com 2019 - 2024. All rights reserved.