2010-08-21 4 views
26

J'ai un tableau d'éléments. Si je fais un arr.max, je vais obtenir la valeur maximale. Mais j'aimerais avoir l'index du tableau. Comment trouver dans RubyComment trouver l'index d'un tableau qui a une valeur maximale

Par exemple

a = [3,6,774,24,56,2,64,56,34] 
=> [3, 6, 774, 24, 56, 2, 64, 56, 34] 
>> a.max 
a.max 
=> 774 

Je dois savoir l'indice de ce qui est 7742. Comment est-ce que je fais ceci dans Ruby?

+0

Cette question est l'équivalent d'une partie de la question posée à http://stackoverflow.com/questions/1656677/how-do-i-find-a-integer-max-integer-in-an-array-for-ruby- and-return-the-indexed-p –

Répondre

33
a.index(a.max) should give you want you want 
+9

Cela va traverser le tableau deux fois. – sepp2k

+1

Au moins en Python, il est plus rapide de parcourir le tableau deux fois dans les fonctions écrites en C que d'être plus intelligent dans le code interprété: http://lemire.me/blog/archives/2011/06/14/the- les interprètes-de-langue-sont-les-nouvelles-machines/ – RecursivelyIronic

+0

itérent à travers le tableau avec chacun et en utilisant une comparaison pour garder une trace du max actuel plus vite que cette solution? – srlrs20020

6

qui devrait fonctionner

[7,5,10,9,6,8].each_with_index.max 
25

En 1.8.7+ each_with_index.max retourne un tableau contenant l'élément maximum et son indice:

[3,6,774,24,56,2,64,56,34].each_with_index.max #=> [774, 2] 

En 1.8.6 vous pouvez utiliser enum_for pour obtenir le même effet:

require 'enumerator' 
[3,6,774,24,56,2,64,56,34].enum_for(:each_with_index).max #=> [774, 2] 
Questions connexes