Ruby / Rails:找到新人员时循环浏览CSV并设置标志的最佳方法

马克·洛克利尔

我感觉这是在编程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

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

我的问题很大一部分是设置标记为“ ..当您找到新学生(new person_id)然后调用process方法以查找最早的开始日期的最佳方法。

TJ

如果我正确理解这一点,则您尝试获取的结果哈希看起来像{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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章