использование методов на хеш-элементах - PullRequest
0 голосов
/ 15 ноября 2009

Так что я наполовину спросил это в другой ветке о том, как получить .max и вернуть значение на экран. Все, где очень хорошие ответы, я просто не задавал весь вопрос. Я закончил с:

 hash_example = {777 =>["dog","brown",3], 123=>["cat","orange",2]}  #hash example

 h =hash_example.values.collect{|a|a[0]}.max #change .max value based on element
 puts the a[1] element based on what is returned in h because of .max of a[0].max

Проблема теперь в том, что я хочу взять h (найденное значение .max) и на основе обнаружения того, что этот элемент возвращает другой элемент из того же массива в следующей строке кода. Для дальнейшего уточнения, скажем, приведенный выше код нашел собаку как .max. Как мне вернуть коричневый или 3 на экран в следующей строке кода?

 puts hash_example.some_method_here{block of  useful code using the h value} ? 

Я, вероятно, смотрю на это неправильно или это просто простая постановка ставок? Я пробовал вложение в блоке, но определенно не правильно его вкладывал. .inject и .map Я думаю, что это правильное направление, но я не пишу блок правильно.

Ответы [ 2 ]

1 голос
/ 15 ноября 2009

Вот способ найти максимум, который также даст вам другие элементы массива ...

e = {777=>["dog", "brown", 3], 123=>["cat", "orange", 2]}

>> e.values.transpose[0].max
=> "dog"

Так что мы можем переписать код сверху ...

x = e.values
t = x.transpose[0]
x[t.index t.max]

Что возвращает ["dog", "brown", 3]

1 голос
/ 15 ноября 2009

Вам, вероятно, лучше всего отсортировать значения хешей и взять последнее (в качестве максимального значения), а затем работать оттуда.

>> h = {777 =>["dog","brown",3], 123=>["cat","orange",2]}
=> {777=>["dog", "brown", 3], 123=>["cat", "orange", 2]}
>> h.values.sort_by{|a|a[0]}.last[1]
=> "brown"

Метод sort_by принимает блок, описывающий то, что вы хотите отсортировать, относительно отдельного элемента - в этом случае он использует первый элемент массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...