(红宝石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。
谢谢!
答案 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