簡體   English   中英

從ruby中的哈希寫入CSV

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

歡迎使用堆棧溢出。 下次編寫帖子時,可以使用代碼格式化工具使其更易於閱讀。

我可以在這里看到一些錯誤。

  1. 根據Mark的評論, count.v應該是v.count
  2. 您已經在沒有分隔符的一行上合並了兩個語句,所以我想您的錯誤消息就像unexpected tIDENTIFIER, expecting end-of-input 您希望將它們鏈接在一起,以便滿足條件,然后將args添加到csv中。
  3. 垂直管|k, v| 用於在ruby中表示塊參數,但是當您可能需要數組時,您要重復它們。
  4. 我真的看不到.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM