Wenn a
das Array ist, möchte ich a.index(a.max)
, aber etwas mehr Ruby-like. Es sollte offensichtlich sein, aber ich habe Probleme, die Antwort an so und anderswo zu finden. Offensichtlich bin ich Ruby neu.Was ist in Ruby der sauberste Weg, um den Index des größten Wertes in einem Array zu erhalten?
Antwort
für Ruby 1.8.7 oder höher:
a.each_with_index.max[1]
Es tut eine Iteration. Nicht unbedingt die semantischste Sache überhaupt, aber wenn du dich dabei oft vorkommst, würde ich es trotzdem in eine index_of_max
Methode verpacken.
a = [1, 4 8]
a.inject(a[0]) {|max, item| item > max ? item : max }
Mindestens es ist Ruby wie :)
in Ruby 1.9.2 Ich kann dies tun;
arr = [4, 23, 56, 7]
arr.rindex(arr.max) #=> 2
Dies ist im Grunde eine schlechtere Version der unerwünschten ursprünglichen Lösung. – MegaTom
Hier ist, was ich diese Frage zu beantworten, denke:
a = (1..12).to_a.shuffle
# => [8, 11, 9, 4, 10, 7, 3, 6, 5, 12, 1, 2]
a.each_index.max_by { |i| a[i] }
# => 9
Hier ist ein Weg, um alle Indexwerte der Max-Werte zu erhalten, wenn mehr als eine.
Gegeben:
> a
=> [1, 2, 3, 4, 5, 6, 7, 9, 9, 2, 3]
Sie den Index aller Max-Werte finden können (oder einen bestimmten Wert) von:
> a.each_with_index.select {|e, i| e==a.max}.map &:last
=> [7, 8]
Ich wollte nur eine Verhaltens- und Leistungsunterschiede für einige beachten die Lösungen hier. Die "tie brechen" Verhalten von duplizieren max Elemente:
a = [3,1,2,3]
a.each_with_index.max[1]
# => 3
a.index(a.max)
# => 0
Aus Neugier ich sie lief sowohl in Benchmark.bm
(für die a
oben):
user system total real
each_with_index.max 0.000000 0.000000 0.000000 ( 0.000011)
index.max 0.000000 0.000000 0.000000 ( 0.000003)
Dann erzeugt ich ein neues a
mit Array.new(10_000_000) { Random.rand }
und reran den Test:
user system total real
each_with_index.max
2.790000 0.000000 2.790000 ( 2.792399)
index.max 0.470000 0.000000 0.470000 ( 0.467348)
das macht mich denken, es sei denn, Sie müssen speziell den höheren Index max wählen, a.index(a.max)
ist die bessere Wahl.
- 1. Verwendung von INDEX MATCH zum Finden des absolut größten Wertes
- 2. Was ist der beste Weg, um den letzten Index des Zeichens in SQL 2008 zu bekommen?
- 3. Wie erhalten Sie den Index des niedrigsten Wertes in einem int-Array?
- 4. Was ist der beste Weg, um einen Index zu erstellen, um die schnellste Leseantwort zu erhalten?
- 5. Effizienter Weg, um den Index des oberen oberen dreieckigen Eintrags in einem numpligen Array zu finden?
- 6. Der sauberste Weg, um eine Liste der numerischen Werte in einer Zeichenkette zu erhalten
- 7. Inside Express/EJS Templates, was ist der sauberste Weg, um ein Array zu durchlaufen?
- 8. Finde den Index eines Wertes in einem Array
- 9. Ermittelt den Index eines Wertes in einem Bash-Array
- 10. Ruby: Was ist der einfachste Weg, um das erste Element aus einem Array zu entfernen?
- 11. Was ist der beste Weg, um eine Zeichenfolge aufzuteilen, um alle Teilstrings von Ruby zu erhalten?
- 12. Wie erhält man den Index eines Artikels in einem Array?
- 13. Was ist der effizienteste Weg, um den Index eines bestimmten Charakters in einer Zeichenkette zu verfolgen?
- 14. Was ist der sauberste Weg, um Pass-by-Reference in Actionscript 3.0 zu simulieren?
- 15. Was ist der sauberste Weg, um die Ergebnisse einer Methode während der Datenbindung zu rendern?
- 16. Was ist der sauberste Weg, Daten in einem Regal zu entfernen?
- 17. Was ist der richtige Weg, um diese Informationen zu erhalten?
- 18. Was ist der sauberste Weg, Ruby on Rails mit AngularJS zu integrieren?
- 19. Was ist der sauberste Weg, um ein HTML-Element in einer Ansicht in Schienen
- 20. Was ist der einfachste Weg, um die Header aus einer CSV-Datei in Ruby zu erhalten?
- 21. Was ist der beste Weg, um die Währung des Benutzers auf einem Android-Gerät zu erhalten?
- 22. Der einfachste Weg, um nach einem Index oder einem Schlüssel in einem Array zu suchen?
- 23. Was ist der sauberste Weg, um einen std :: vector mit Iteratoren zu bearbeiten?
- 24. Effizienter Weg, um den größten Schlüssel in einem Wörterbuch mit einem Wert ungleich Null zu finden
- 25. Was ist der einfachste Weg, um Java-Objekte zu erhalten?
- 26. Was ist der effizienteste Weg, um den Quellcode der Webseite in C zu erhalten?
- 27. Was ist der beste Weg, um ein Objekt in einem Array in ReactJS zu aktualisieren?
- 28. Was ist der richtige Weg, um den "in" -Operator zu verwenden, um ein Histogramm zu erstellen?
- 29. Was ist der beste Weg, um das Date-Objekt für den Zeitstempel 1224642020 zu erhalten?
- 30. Best/sauberste Weg, um alle Tasten zu greifen, die in Ruby in url Ende
Ich denke, du hast es. Was ist daran nicht rubinisch? – Ben
Ben, ich war auf der Suche nach etwas wie a.max_index. Raten Sie, dass es nicht eingebaut ist. –
Auch wenn die gewünschte Funktion nicht eingebaut ist, können Sie noch ein '.max_index'-Mitglied zur' Array'-Klasse hinzufügen. Hier ist ein Beispiel für das Erweitern von 'String' oder' Integer' mit einem benutzerdefinierten Mitglied: http://www.hawkee.com/snippet/1260/ – bta