2010-08-21 8 views
26

Ich habe eine Reihe von Elementen. Wenn ich eine arr.max mache, bekomme ich den maximalen Wert. Aber ich möchte den Index des Arrays erhalten. Wie es in Ruby zu findenWie finde ich den Index eines Arrays, das einen maximalen Wert hat

Zum Beispiel

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

Ich brauche den Index dieser 774 zu wissen, welche 2 ist. Wie mache ich das in Ruby?

+0

Diese Frage entspricht einem Teil der Frage unter http://stackoverflow.com/questions/1656677/how-do-i-find-a-integer-max-integer-in-an-array-for-ruby- und-return-the-indexed-p –

Antwort

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

Dies wird jedoch zweimal durch das Array gehen. – sepp2k

+1

Zumindest in Python ist es schneller, das Array zweimal in Funktionen zu durchlaufen, die in C geschrieben sind, als wenn es im interpretierten Code schlauer wäre: http://lemire.me/blog/archives/2011/06/14/the- Sprachinterpreter-sind-die-Neu-Maschinen/ – RecursivelyIronic

+0

iteriert durch das Array mit jedem und einen Vergleich verwenden, um den aktuellen max schneller als diese Lösung zu verfolgen? – srlrs20020

6

die

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

In 1.8.7+ each_with_index.max wird ein Array arbeiten sollte die maximale Element und sein Index enthält:

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

In 1.8.6 können Sie enum_for verwenden Um den gleichen Effekt zu erhalten:

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