2009-11-15 50 views
0

所以我在另一個線程中半問這個關於如何獲得.max並將值返回給屏幕的問題。所有非常好的答案,我只是沒有問整個問題。我結束了去:在散列元素上使用方法

hash_example = {777 =>["dog","brown",3], 123=>["cat","orange",2]} #hash example 

h =hash_example.values.collect{|a|a[0]}.max #change .max value based on element 
puts the a[1] element based on what is returned in h because of .max of a[0].max 

問題是,現在我要帶H(該值的.max找到),並根據發現元素來自同一陣列中的下一行代碼返回不同的元素。爲了進一步闡述讓我們說上面的代碼發現狗爲.max。如何在下一行代碼中返回棕色或3到屏幕?

puts hash_example.some_method_here{block of useful code using the h value} ? 

我可能在調查這個錯誤的方式,或者它只是一個簡單的投票統計?我試過一些嵌套塊,但我肯定沒有正確嵌套它。 .inject和.map我認爲是正確的方向,但我沒有正確寫入塊。

回答

1

你可能是最好的排序哈希值,並採取最後一個(作爲最大值),然後從那裏工作。

>> h = {777 =>["dog","brown",3], 123=>["cat","orange",2]} 
=> {777=>["dog", "brown", 3], 123=>["cat", "orange", 2]} 
>> h.values.sort_by{|a|a[0]}.last[1] 
=> "brown" 

的sort_by方法接受一個塊,描述要排序,相對於單一的元素是什麼 - 在這種情況下,它使用第一個數組元素。

+0

這也是我正在建議的。 – 2009-11-15 19:06:55

1

這裏是尋找最大,也將讓你的其他數組元素的一種方式......

e = {777=>["dog", "brown", 3], 123=>["cat", "orange", 2]} 

>> e.values.transpose[0].max 
=> "dog" 

因此,我們可以從上重寫代碼...

x = e.values 
t = x.transpose[0] 
x[t.index t.max] 

其中返回["dog", "brown", 3]

+0

順便說一下,請注意,'[0]'與「狗」是第一個事實無關,而是剝離了現在一排「[狗」,「貓」,「斑馬」,「獵豹」 ,「僕人」,...]。這種技術也可以讓你像'[「brown」,「orange」,...]'和'[3,2,...]'這樣的行。 (這些將是'[1]'和'[2]'行)。 – DigitalRoss 2009-11-15 19:56:22

+0

我又想過如何解決這個問題。我可以找到一個.max的元素並返回散列鍵嗎?採用散列鍵並返回我想要顯示的數組中的元素。我不知道如何從.max返回鍵,並使用該鍵返回我想要的元素? – Matt 2009-11-16 10:02:24