数组检测方法 - 返回特定子数组索引的值?

时间:2011-01-31 13:56:11

标签: ruby

(红宝石1.86)

我有一个由以下数组组成的数组:

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

我知道我可以使用detect方法在MyArray的子​​数组的索引[0]中找到'orange'的第一个实例:

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

如果可能,我如何让detect方法返回sup-array索引位置1的值。就像,i [0]被返回,但是当我[0] =='orange'时我需要我[1]返回。

我需要搜索'orange'并且返回值为2。

谢谢!

2 个答案:

答案 0 :(得分:3)

我想你希望返回值为4.不需要#detect:

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

#=> 4

答案 1 :(得分:2)

我建议使用哈希。它更适合您描述的用法,并且对于大量数据更快。

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

puts fruit['orange'] #=> 4

但如果你真的想从子阵列中检索价值,请将first更改为last

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

更新:甚至更简单,正如@steenslag所指出的那样:

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