Метод обнаружения массива - вернуть значение определенного индекса массива? - PullRequest
0 голосов
/ 31 января 2011

(руб. 1,86)

У меня есть массив, состоящий из массивов, таких как:

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

Я знаю, что могу использовать метод обнаружения, чтобы найти первый экземпляр 'orange' в индексе [0] подмассивов в MyArray:

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

Если это возможно, как я могу сделать так, чтобы метод детектирования возвращал значение позиции индекса sup-массива 1. Например, i [0] возвращается, но когда i [0] == 'orange', мне нужен i [1] вернулся.

Мне нужно найти «оранжевый» и вернуть значение 2.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 31 января 2011

Полагаю, вы хотите, чтобы возвращаемое значение равнялось 4. Нет необходимости в #detect:

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

#=> 4
2 голосов
/ 31 января 2011

Я бы рекомендовал использовать хэш. Это лучше подходит для использования, которое вы описываете, и будет быстрее для больших объемов данных.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...