我有一個散列哈希(@post),我想將它保存到csv。對我來說奇怪的是,我的方法適用於標題,但不適用於行。如果我使用如何將散列轉換爲特定順序的數組? (紅寶石)
csv << (@post_csv_order.each {|element| puts single_post[element]})
顯示行,我可以在屏幕上看到的右弦,但CSV文件中包含的哈希鍵不是哈希值的值的值。基本上我在我的csv中有5行標題,而不是正確的值。
我想我需要將@post [key]散列轉換爲基於@post_csv_order(包含@post [key]散列鍵)的順序的數組有一個散列方法to_a但它不會給我我需要的訂單。
我想你可能會建議不同的方法,而不是使用散列哈希,但我也想知道如何將散列轉換爲具有一些預定義的順序的數組。
另一方面,如果有任何簡單的方法如何保存散列哈希到csv /表我很高興重寫我的代碼。
require 'rubygems'
require 'faster_csv'
require 'pp'
@post = {123 => {"ForumID" => "123", "Post author" => "Thom" },
222 => {"ForumID" => "222", "Post author" => "Mark"},
345 => {"ForumID" => "345", "Post author" => "Eddy"},
444 => {"ForumID" => "444", "Post author" => "Eli"}}
@post_csv_order = [
"ForumID" ,
"Post author"
]
FasterCSV.open("test.csv", "w", { :quote_char => '"', :col_sep =>',', :row_sep =>:auto, :headers => true, :return_headers => false, :force_quotes => true}) do |csv|
csv << (@post_csv_order.each {|element| element})
@post.each_value do |single_post|
csv << (@post_csv_order.each {|element| single_post[element]})
#csv << (@post_csv_order.each {|element| puts single_post[element]})
end
end
@Theo:謝謝你的解決方案。我不明白爲什麼爲標題工作的'csv <<(@ post_csv_order.each {| element | element})工作 – Radek
它的工作原理是'csv << @ post_csv_order','@ post_csv_order'包含標題。 '.each {| element |元素}'(除了本身沒有操作)沒有效果。 'each'返回數組本身,即消息的接收者。 'each'只是一個循環構造,它只有在循環有副作用時纔有用,你的循環不會。你使用'each'就好像它是'map'一樣。 – Theo