Ruby:如果满足条件,则写入CSV

我是Ruby的新手,并使用它来尝试读/写csv。 到目前为止,我有一个脚本执行以下操作:

  1. 从CSV文件导入数据,将选择列存储为单独的数组(我不需要每列的数据)
  2. 对数据执行计算,将结果存储在新创建的数组中
  3. 将数组转换为表行,以输出到csv

    table = [Result1, Result2, Result3].transpose 

目前,我可以使用以下内容输出表:

  CSV.open(resultsFile, "wb", :write_headers=> true, :headers => ["Result1", "Result2", "Result3"] ) do |csv| table.each do |row| csv << row end 

我的问题是,如何添加条件只输出其中一个结果等于某个文本字符串的行。 例如,如果result2中的值等于“Apple”,我希望将该行中的数据写入csv文件。 如果没有,则跳过该行。

我尝试将if / else放在几个不同的区域并且没有取得任何成功。

谢谢你的帮助

您可以执行以下操作:

 header = ["Result1", "Result2", "Result3"] CSV.open(resultsFile, "wb", :write_headers=> true, :headers => header) do |csv| table.each do |row| csv << row if header.zip(row).to_h["Result2"] == "Apple" end end 

zip合并两个数组并生成数组数组,其中每个子数组都有来自相同索引的输入数组的元素,而to_h可以将任何2元素数组的数组转换为哈希。 例如:

 row = ["Orange", "Apple", "Guava"] header = ["Result1", "Result2", "Result3"] header.zip(row).to_h => {"Result1"=>"Orange", "Result2"=>"Apple", "Result3"=>"Guava"}