2014-06-24 2 views
1

Это может быть очень просто, но я не знаю всех функций массива Ruby.Ruby массив двухмерных массивов, поиск/поиск?

Если у меня есть данный массив как:

values = [["a", 1], ["b", 3], ["c", 7], ... etc ] 

Я хотел бы две функции:

  • Функция, которая, когда я даю его "б", дает мне 3.
  • Другой способ, функция, которая, когда я даю ей 3, дает мне «b».

Должен быть простой способ?

+2

При запросе кода очень важно показать, что вы пробовали, и описать, почему он не делает то, что вы хотите. См. № 3 в разделе «Часто задаваемые вопросы по теме» (http://stackoverflow.com/help/on-topic). Как и потому, что вы этого не сделали, ваш вопрос технически не по теме, поэтому вы можете сразу исправить это. –

ответ

1
hash = array.to_h => Converts your array to a hash 
hash[key] = value => Get the value associated with the key 
hash.invert[key] = value => This method inverts your hash and you can select values 
+0

Спасибо, это было для options_for_select, но теперь я понимаю, что это может занять хэш, нет необходимости в двойном массиве. – bobomoreno

2
Hash[values]["b"] # => 3 
Hash[values.map(&:reverse)][3] # => "b" 
2

Первый легко достичь, путем преобразования массива в Hash с:

value_hash = Hash[values] 

И доступ к этому с:

value_hash['b'] # => 3 

другой путь вокруг, я бы первым как узнать, уверены ли вы, что это уникальный запрос? Точно так же уникальны как «a», «b», «c», ... и 1,3,7 ... и т. Д.?

2

Мой первый вопрос: должен ли это быть массив? Hash предназначен для этого и имеет встроенный ключ/значение.

Вы можете создать хэш из массива, выполнив:

hash = Hash[values] 

Затем используйте hash["a"] # => 1

Для реверса, сделайте следующее: hash.key(1) # => "a"

+0

Вы можете создать хэш из массива, если массив содержит четное число элементов. Элементы с нечетными номерами рассматриваются как ключи, а четные элементы рассматриваются как значения. –

+0

@theTinMan Полностью верно. Это предположение было основано на примере OP. – CDub

+0

Ну, ОП не знал, что можно создать хэш из массива, поэтому условие, что массив должно быть четным числом элементов, вероятно, также неизвестно. –

1

Да хэш-ответ, если вы не Конечно, у вас есть дубликаты ключей. В противном случае вы можете использовать Array, # ассоциативного # rassoc который ищет массив массивов, соответствующие первые и последние элементы соответственно:

ary = [["A", 1], ["B", 2], ["C", 3], ["D", 4], ["E", 5], ["F", 6], ["G", 6]] 
ary.assoc('A') => ["A", 1] 
ary.rassoc('3') => ["C", 3] 

Примечания: эти методы возвращают первый массив соответствия, не все из них.

Смотри на http://www.ruby-doc.org/core-2.1.2/Array.html

0

Я не вижу смысла в создании хэш, чтобы найти одно значение. Почему не простой, прямой подход?

values = [["a", 1], ["b", 3], ["c", 7]] 

values.find { |l,n| l=='b' }.last #=> 3 
values.find { |l,n| n==3 }.first #=> "b" 

Конечно, ни одно из них не имеет отношения к нескольким значениям.

Смежные вопросы