2011-01-31 30 views
0

(紅寶石1.86)數組檢測方法 - 返回特定子數組索引的值?

我具有由像數組的數組:

>> myArray 
=> [["apple", 1], ["bananna", 2], ["peach", 3], ["orange", 4]] 

我知道可以使用檢測方法來查找「橙色」的索引的第一個實例[0]的子陣列中MYARRAY:

myTest = (myArray.detect { |i| i[0] == 'orange' } || []).first 
=> orange 

如果這是可能的,如何可以具有檢測方法返回SUP-數組索引位置1一樣的值,I [0]被返回,但是當我[0] =='橙色'我需要我[1]返回。

我需要尋找「桔子」,並有返回值是2

謝謝!

+0

爲什麼你想返回值爲2?鑑於你的描述,我會想你想要4. – 2011-01-31 13:59:59

回答

2

我想你要的返回值是4.不需要#detect:

ar = [["apple", 1], ["bananna", 2], ["peach", 3], ["orange", 4]] 
puts ar.assoc("orange").last 

#=> 4 
+1

不錯! +1。我總是忘記assoc,因爲我從來沒有發現它的需要。 – 2011-01-31 14:19:35

2

我建議使用散列。它更適合您描述的用法,並且對於大量數據將更快。

fruit = {'apple'=>1, 'banana'=>2, 'peach'=>3, 'orange'=>4, 'kiwi'=>42} 

puts fruit['orange'] #=> 4 

但如果你真的想要從你的子陣的價值,改變你的firstlast

myTest = (myArray.detect { |i| i[0] == 'orange' } || []).last 
#=> 4 

更新:甚至簡單,因爲@steenslag指出:

myTest = myArray.assoc("orange").last 
#=> 4 
+0

謝謝,這有幫助。該數組來自數據庫查詢。我從來沒有試過像2字段查詢結果轉儲到哈希。這麼多來學習.... – Reno 2011-01-31 14:46:42