2013-03-19 24 views
1

我有哈希像這樣(的SOURCE.inspect輸出)獲取數據:紅寶石 - 如何有效地從哈希根據值

[{:id=>"1", :day=>"Monday", :message=>"... text ..."}, {:id=>"2", :day=>"Friday", :name=>"... message ..."}, ...] 

我需要獲取所有「項目」,其中天==星期一,但怎麼做? 我試過

SOURCE.select{|key, hash| hash[:day] == "Monday" } 

但這是錯誤的......另外,文件是相當大的(幾乎文字1MB),什麼是在這個哈希搜索的最佳方式?

謝謝

+0

我不認爲有任何其他的方式,但你正在使用。 – jvnill 2013-03-19 16:31:58

+0

無論如何都要檢查每個項目? – Jokester 2013-03-19 16:38:11

+0

根據散列中可能的值,您可以執行'SOURCE.select {| h | h.has_value? 「星期一」}'。我不把它作爲答案的原因是因爲它會在Hash中的任何地方拾取包含「Monday」的值作爲值。 – 2013-03-19 17:15:38

回答

3
SOURCE.select {|x| x[:day] == "Monday" } 
+0

嗯...我正在嘗試這個,但仍然只有一個空陣列。 – user984621 2013-03-19 16:36:33

+0

我根據你的例子對它進行了測試,它可以工作。你可以檢查一下你的'SOURCE'嗎? – 2013-03-19 16:51:37

+1

對不起,你的回答很好,我在我的代碼中有一個愚蠢的錯字... – user984621 2013-03-19 17:03:11

3

select上的一組讓你一個元素 - 在你的情況下,哈希值。所以你可以這樣做:

SOURCE.select { |hash| hash[:day] == "Monday" }