我有一個數據庫查詢返回類似的結果:紅寶石DB結果集陣列中的哈希值在哈希
db_result.each {|row| puts row}
{"IP"=>"1.2.3.4","Field1"=>"abc","Field2"=>"123"}
{"IP"=>"1.2.3.4","Field1"=>"abc","Field2"=>"234"}
{"IP"=>"1.2.3.4","Field1"=>"bcd","Field2"=>"345"}
{"IP"=>"3.4.5.6","Field1"=>"bcd","Field2"=>"456"}
{"IP"=>"3.4.5.6","Field1"=>"bcd","Field2"=>"567"}
,並希望把它變成像哈希:
{
"1.2.3.4" => {
"abc" => ["123", "234"],
"bcd" => "345"
},
"3.4.5.6" => {
"bcd" => ["456", "567"]
}
}
什麼我目前的做法是:
result_hash = Hash.new { |h, k| h[k] = {} }
db_result.each do |row|
result_hash[row["IP"]] = Hash.new { |h, k| h[k] = [] } unless result_hash.has_key? row["IP"]
result_hash[row["IP"]][row["Field1"]] << row["Field2"]
end
哪些工作,但是想知道是否有一個整潔的方式。
沒有什麼不整潔你的方法。你正在做一些操作,所以它更具可讀性,因爲它可以保留它,而不是試圖將它塞進一行或混淆它。 – 2012-08-16 14:45:46
這取決於你用來處理到數據庫的連接。我認爲Sequel有能力將查詢結果映射到基於特定字段的哈希散列。 – 2012-08-16 15:01:20
標準的mysql2客戶端,所以沒有什麼花哨的。感謝更好的格式!只是想知道我是否錯過了一招。 – Decado 2012-08-16 15:06:48