gpt4 book ai didi

ruby-on-rails - ruby /rails : Best way to loop through a csv and set flag when new person is found

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:09 25 4
gpt4 key购买 nike

我觉得这是编程 101 的东西,但我要放下我的骄傲并寻求帮助。我有一个正在处理的 CSV。这是一个示例...

person_id, name, start_date
1111, busta, 1/1/14
1111, busta, 1/4/14
1111, busta, 1/7/14
2222, mista, 1/3/14
2222, mista, 1/1/14
2222, mista, 1/11/14

...这是我用来处理行的代码示例...

def self.import(file)
student_start_dates = Hash.new {|hsh, key| hsh[key] = [] }

CSV.foreach(file.tempfile, :headers => true) do |row|
student_start_dates[row["person_id"]] << row["start_date"]
#need something in the loop that says hey...when I find a new person_id send this array to the process method
end
end

def self.process(student)
#process something like 1111 => ["1/1/14", "1/4/14", "1/7/14"]
end

因此,正如您从数据中看到的那样,每个学生都有多个与其关联的开始日期。我正在尝试为每个学生构建一个开始日期数组。当我找到一个新的 person_id 时,需要用我的 start_date 数组“做一些事情”。我的问题是,当我遍历 csv 中的每一行时,添加查找 person_id 变化的逻辑的最佳方法是什么?我知道我可以设置某种在 person_id 更改时设置的标志,然后根据该标志的状态处理我的 start_date 数组,并重置标志。但是,我尝试在没有太多运气的情况下实现它。或者当它这样做时,感觉“脏”。只是希望一双全新的眼睛能给我一些关于更简洁代码的想法。

我的问题的很大一部分是设置一个标志的最佳方式,上面写着“..当你找到一个新学生 (new person_id) 然后调用 process 方法来找到最早的开始日期。

最佳答案

如果我理解正确的话,您正在尝试获得一个看起来像 {1111 => ["1/1/14", "1/4/14", "1/7/14""], 2222 => [...], ...

如果是这样,您可以使用内置的 CSV 解析器,并在遍历每一行时构建散列。

# Create the hash, the default value will be an array
student_start_dates = Hash.new {|hsh, key| hsh[key] = [] }

CSV.foreach(file_name, :headers => true) do |row|
student_start_dates[row["person_id"]] << row["start_date"]
end

关于ruby-on-rails - ruby /rails : Best way to loop through a csv and set flag when new person is found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22099875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com