2010-08-21 15 views
26

Mam szereg elementów. Jeśli wykonam numer arr.max, otrzymam maksymalną wartość. Ale chciałbym uzyskać indeks tablicy. Jak go znaleźć w RubyJak znaleźć indeks tablicy, która ma maksymalną wartość

Na przykład

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

muszę wiedzieć indeks tej 774 który jest 2. Jak to zrobić w Ruby?

+0

To pytanie odpowiada części pytania zadawanego pod adresem http://stackoverflow.com/questions/1656677/how-do-i-find-a-integer-max-integer-in-an-array-for-ruby- i-return-the-indexed-p –

Odpowiedz

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

To przejdzie przez tablicę dwa razy. – sepp2k

+1

Przynajmniej w Pythonie, szybciej jest przechodzić przez tablicę dwa razy w funkcjach napisanych w C, niż być mądrzejszym w zinterpretowanym kodzie: http://lemire.me/blog/archives/2011/06/14/the- interpretery języka-to-the-new-machines/ – RecursivelyIronic

+0

iterują po tablicy z każdym i używają porównania do śledzenia bieżącego maksimum szybciej niż to rozwiązanie? – srlrs20020

6

który powinien działać

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

W 1.8.7+ each_with_index.max zwróci tablicę zawierającą największy element i jego indeks:

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

W 1.8.6 można użyć enum_for aby uzyskać ten sam efekt:

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