[英]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.