[[{"Postponed"=>10}], [{"Low"=>3}], [{"Medium"=>4}], [{"High"=>5}]]
的陣列工作是數組如何使用哈希
我怎麼能得到對應於特定值的值。
說高回報在這個5。 或如何將這個散列數組轉換爲數組,以便搜索變得容易。
我想:
find_all { |v| v['name'] == "Low" }
但它說:
cant convert String to Integer
請提供一些指導
[[{"Postponed"=>10}], [{"Low"=>3}], [{"Medium"=>4}], [{"High"=>5}]]
的陣列工作是數組如何使用哈希
我怎麼能得到對應於特定值的值。
說高回報在這個5。 或如何將這個散列數組轉換爲數組,以便搜索變得容易。
我想:
find_all { |v| v['name'] == "Low" }
但它說:
cant convert String to Integer
請提供一些指導
如果你有一些這樣的代碼:
array = [[{"Postponed"=>10}], [{"Low"=>3}], [{"Medium"=>4}], [{"High"=>5}]]
然後把它變成一個紅寶石哈希:
hash = array.inject({}) {|h, e| h.merge(e.first) }
# => {"Postponed"=>10, "Low"=>3, "Medium"=>4, "High"=>5}
所以,你可以很容易地找到 '低' 值:
hash['Low']
# => 3
編輯:馬克托馬斯的答案是相當偉大的,一個d比注射更短,因爲它做同樣的事情。他在我回答之前寫下了它。尼斯;)
這個怎麼樣?
arr = [
[{"Postponed"=>10}],
[{"Low"=>3}],
[{"Medium"=>4}],
[{"High"=>5}]
]
arr1 = []
arr.each{|a|
arr1.push(a[0])
}
雖然我不知道你真的只是想獲得一個哈希,你會做像這樣:
myHash = {}
arr.each{|a|
a[0].each{|b, c|
myHash[b] = c
}
}
你會然後像myHash["Postponed"]
然後如何獲得arr1中的鍵值? – 2012-01-27 14:08:04
我意識到這一點。我想你會更好用散列(請參閱我的後續編輯)。我只提供了arr1,因爲你最初需要一個數組。 – SimonMayer 2012-01-27 14:12:41
thnx西蒙爲您的快速反應! – 2012-01-27 18:09:54
訪問它在一般情況下, ,哈希將不是唯一的,所以您需要過濾而不是通過索引選擇一個。例如,假設你有這樣的:
現在讓我們假設你想獲得對應於任何散列與:coconut
鍵的值。然後,只需使用:
arr.flatten.map { |h| h[:coconut] }.compact
# => ["ghi"]
給出答案列表。在這種情況下,只有一個匹配鍵,所以數組中只有一個條目。如果還有其他的哈希值是有一個:在有椰子鍵,那麼你就會有這樣的:
# => ["ghi", "jkl", "mno"]
就整體而言,雖然,這是一個非常不尋常的數據結構有。如果你控制結構,那麼你應該考慮使用可以按照你喜歡的方式返回合理答案的對象,而不是哈希。
好吧,thnx很多@John ..它的工作。你也可以告訴我如何改變結構。在你的例子中說,我想將arr轉換爲這樣的[{:apple =>'abc'},{:banana =>'def'}] ..我的意思是正常散列而不是散列陣列 – 2012-01-27 14:13:09
你的榜樣仍然是一組哈希值。 (原始結構是散列數組。)您可以通過'arr.flatten'獲得剛剛描述的內容。 – 2012-01-27 14:39:47
你可以簡單地調用#flatten
原來陣列上。那會給你一些散列。我認爲你真的想要的只是一個散列。
1.8.7 :006 > [[{"Postponed"=>10}], [{"Low"=>3}], [{"Medium"=>4}], [{"High"=>5}]].flatten
=> [{"Postponed"=>10}, {"Low"=>3}, {"Medium"=>4}, {"High"=>5}]
我會問,你在做什麼來獲得原始結構?這可以改變嗎?
thnx Thanatos !! – 2012-01-27 18:09:25
如何做一個散列出來的高效支持?
arr.flatten.reduce(:merge)
#=> {"Postponed"=>10, "Low"=>3, "Medium"=>4, "High"=>5}
thnx馬克,你的答案是有用的:) – 2012-01-27 18:08:39
最好的解決方案(恕我直言)是改變如何創建結構。你有能力做到這一點嗎? – 2012-01-27 14:06:42
是的馬克我有能力做到這一點,你能指導我通過嗎? – 2012-01-27 14:10:43
嗅覺像一個正常的散列:'status = {「Postponed」=> 10,「Low」=> 3,「Medium」=> 4,「High」=> 5} – dgasper 2012-01-27 14:12:41