我有一个哈希数组(实际上是CSV行),我需要查找并保留所有匹配两个特定键(用户、部分)的行。以下是数据示例:
[
{ user: 1, role: "staff", section: 123 },
{ user: 2, role: "staff", section: 456 },
{ user: 3, role: "staff", section: 123 },
{ user: 1, role: "exec", section: 123 },
{ user: 2, role: "exec", section: 456 },
{ user: 3, role: "staff", section: 789 }
]
所以我需要返回一个数组,其中只包含出现相同的用户/部分组合超过一次的行,如下所示:
[
{ user: 1, role: "staff", section: 123 },
{ user: 1, role: "exec", section: 123 },
{ user: 2, role: "staff", section: 456 },
{ user: 2, role: "exec", section: 456 }
]
我尝试的双重循环解决方案如下:
enrollments.each_with_index do |a, ai|
enrollments.each_with_index do |b, bi|
next if ai == bi
duplicates << b if a[2] == b[2] && a[6] == b[6]
end
end
但由于CSV有145K行,所以花费的时间非常漫长。
我如何更有效地获取所需的输出?
CSV.foreach
应该逐行读取,这样有利于内存的消耗。但是无论如何,你都需要比较所有的行。你可以在内存中完成所有操作,也可以将其保存到数据库中并进行唯一性搜索。 - DiegoSalazarCSV.foreach
块? - lyonsinbetaCSV.foreach
调用。请看答案。 - DiegoSalazar