[英]Write into CSV from a hash in ruby
我正在尝试将一些Hash元素写入CSV。 @boo_hoo
是我每个键的哈希值,如果它们只有一个值,则我不希望它们出现在CSV中。 我的语法一定有问题。 在这种情况下,有人可以解释一下如何访问哈希的键值吗? 谢谢!
CSV.open("final_data.csv", "wb") {|csv|
@boo_hoo.to_a.each.count {|k, v|
count.v > 1 csv << |k, v|
}
}
欢迎使用堆栈溢出。 下次编写帖子时,可以使用代码格式化工具使其更易于阅读。
我可以在这里看到一些错误。
count.v
应该是v.count
。 unexpected tIDENTIFIER, expecting end-of-input
。 您希望将它们链接在一起,以便满足条件,然后将args添加到csv中。 |k, v|
用于在ruby中表示块参数,但是当您可能需要数组时,您要重复它们。 .to_a.each.count
在为您做什么,除了可能导致更多语法错误。 要写成一行:
CSV.open("final_data.csv", "wb") {|csv| @boo_hoo.each {|k, v| csv << [k, v] if v.count > 1 } }
这可能会有点长,所以我很想将代码块分成多行代码块:
CSV.open("final_data.csv", "wb") do |csv|
@boo_hoo.each {|k, v| csv << [k, v] if v.count > 1 }
end
编辑:我写这篇文章时,您已经编辑了您的帖子。 在ruby中,对包含一行代码的代码块使用单括号{}
是一个习惯用法,但是do ... end
延伸到多行代码的代码块do ... end
。
另外,为了响应Mudasobwa的评论,您可能想要添加splat运算符[k,*v]
。 我的代码是有效的ruby,但是输出可能不是您想要的。 假设@boo_hoo = {:a=>[1, 2, 3], :b=>[1], :c=>[1, 2]}
。 上面的代码产生输出
a,"[1, 2, 3]"
c,"[1, 2]"
如果将块更改为
@boo_hoo.each {|k, v| csv << [k, *v] if v.count > 1 }
你得到的输出
a,1,2,3
c,1,2
这几乎可以肯定是您实际想要的CSV格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.