【发布时间】:2016-10-11 14:47:14
【问题描述】:
我有一个管道分隔的文本文件,我正在循环浏览它,如下所示:
123|ADAM JOHNSON|AAUA|||||||||||1||||
123||AAUA||||||||8675|90.0|90.0||||||||
444|STEVE SMITH|AAUA|||||||||||1|||||
444||AAUA||||||||2364|50.0|50.0|||||||
444||AAUA||||||||8453|50.0|50.0||||
567|ALLEN JONES|AAUA|||||||||||1||||||
567||AAUA||||||||6578|75.0|75.0||||||
567||AAUA||||||||1234|10.0|10.0||||
567||AAUA||||||||1234|15.0|15.0|||||
我首先获取这些行的第一个、第十个和第十一个索引,并将它们放入一个数组数组中,如下所示:
CSV.foreach('data.txt', { :col_sep => '|' }) do |row|
if row[1].nil?
@group_array << [row[0], [row[10], row[11]]]
end
end
所以我得到类似的东西:
[["123", ["8675", "90.0"]]
------------------
["444", ["2364", "50.0"]]
["444", ["8453", "50.0"]]
------------------
["567", ["6578", "75.0"]]
["567", ["1234", "10.0"]]
["567", ["1234", "15.0"]]]
我正在苦苦挣扎的是遍历数组,找到具有相同第一个索引(3 个整数 id)的分组,循环遍历然后在第二个数组中找到具有相同 4 个整数 id 的任何重复项,然后添加第三个index 浮动然后吐出一个最终数组,其中删除了重复项并将它们的值相加。
预期输出应如下所示:
[["0006310001", ["789663473", "90.0"]],
["0006410001", ["297103188", "50.0"]],
["0006410001", ["757854164", "50.0"]],
["0006610001", ["557493572", "75.0"]],
["0006610001", ["981894386", "25.0"]]]
【问题讨论】:
-
是的,需要澄清,但您应该在发布问题之前做到这一点。
-
另外,发布您的预期输出。
-
你说得对,这不是借口,但这是一项正在进行的工作,我正在严重旋转我的车轮。 @SteveTurczyn 已经提供了解决问题的答案。