2009-11-15 5 views
0

J'ai donc semi-demandé cela dans un autre fil sur la façon d'obtenir .max et retourner une valeur à un écran. Tous où très bonnes réponses, je n'ai pas posé toute la question. J'ai fini par aller avec:en utilisant des méthodes sur les éléments de hachage

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 

Le problème est maintenant je veux prendre h (la valeur .max trouvée) et basée sur la recherche de cet élément renvoie un élément différent du même tableau dans la ligne de code suivante. Pour élaborer plus loin, disons que le code ci-dessus trouve le chien comme .max. Comment puis-je retourner brun ou 3 à l'écran dans la ligne de code suivante? Je regarde probablement ceci dans le mauvais sens ou est-ce juste une simple mise en état? J'ai essayé de faire quelques imbrications dans le bloc mais je ne vais certainement pas l'imbriquer correctement. .inject et .map je pense sont la bonne direction mais je n'écris pas le bloc correctement.

Répondre

1

Il est probablement préférable de trier les valeurs de hachage, et de prendre le dernier (en tant que valeur max), puis de travailler à partir de là.

>> 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" 

La méthode sort_by accepte un bloc qui décrit ce que vous voulez trier, par rapport à un seul élément - dans ce cas, il utilise le premier élément de tableau.

+0

C'est aussi ce que j'allais suggérer. –

1

est ici une façon de trouver le maximum qui vous donnera également les autres éléments du tableau ...

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

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

On peut donc réécrire le code du haut ...

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

Qui retourne ["dog", "brown", 3]

+0

BTW, notez que le '[0]' est sans rapport avec le fait que "chien" est premier, plutôt, il décolle ce qui est maintenant une rangée de "[" chien "," chat "," zèbre "," guépard " , "serval", ...] '. Cette technique vous donne aussi des lignes comme '[" brown "," orange ", ...]' et '[3, 2, ...]'. (Ce seraient les lignes [1] et [2] '.) – DigitalRoss

+0

J'ai réfléchi à la façon de résoudre ce problème. Puis-je trouver un .max d'éléments et retourner la clé de hachage? Prenez la clé de hachage et renvoyez l'élément dans le tableau que je veux afficher. Je n'ai aucune idée comment retourner la clé de .max si et utiliser cette clé pour retourner l'élément que je veux? – Matt

Questions connexes