Ich versuche herauszufinden, wie eine Zählung des häufigsten Elements in einem Array von ganzen Zahlen zu finden ist. Ich kann mir einige Methoden vorstellen, die hilfreich sein könnten, aber wenn ich einen Ausdruck innerhalb des Blocks schreibe, verstehe ich nicht mehr, wie man ein Element mit dem nächsten und vorherigen Element vergleicht. Irgendwelche Ideen? Alle Hilfe wird wirklich sehr geschätzt !!!ruby arrays Anzahl der häufigsten Elemente
Antwort
Ein einfaches war es, alle eindeutigen Werte zu bestimmen, jedes in seine Anzahl im Array zu konvertieren und dann die größte Anzahl zu bestimmen.
def max_count(arr)
arr.uniq.map { |n| arr.count(n) }.max
end
Zum Beispiel:
arr = [1,2,4,3,2,6,3,4,2]
max_count(arr)
#=> 3
Es gibt drei Stufen:
a = arr.uniq
#=> [1, 2, 4, 3, 6]
b = a.map { |n| arr.count(n) }
#=> [1, 3, 2, 2, 1]
b.max
#=> 3
Eine etwas effizientere Art und Weise (weil die Elemente von arr
nur einmal aufgezählt werden) ist eine Zählung zu verwenden Hash:
def max_count(arr)
arr.each_with_object(Hash.new(0)) { |n,h| h[n] += 1 }.values.max
end
max_count(arr)
#=> 3
Wir haben:
a = arr.each_with_object(Hash.new(0)) { |n,h| h[n] += 1 }
#=> {1=>1, 2=>3, 4=>2, 3=>2, 6=>1}
b = a.values
#=> [1, 3, 2, 2, 1]
b.max
#=> 3
Siehe Hash::new für eine Erklärung der Hash.new(0)
. Kurz gesagt, wenn h = Hash.new(0)
und h
keinen Schlüssel k
haben, gibt h[k]
den Standardwert zurück, der hier Null ist. h[k] += 1
wird zu h[k] = h[k] + 1
erweitert. Wenn also h
keinen Schlüssel k
hat, wird h[k] = 0 + 1
. Auf der anderen Seite, wenn, sagen wir, h[k] => 2
, dann h[k] = h[k] + 1 #=> h[k] = 3 + 1
.
Vergiss nicht ['max_by'] (http://ruby-doc.org/core-2.3.1/Enumerable.html#method-i-max_by). – tadman
@tadman, ich dachte 'max_by', aber es ist die maximale Anzahl, nicht das Element mit der maximalen Anzahl, das ist gewollt. Wenn ich 'max_by' verwendet hätte, müsste ich die Anzahl für dieses Element neu berechnen, was nicht ansprechend ist. –
Das ist eine Interpretation der Frage, es ist wahr. Ich lese es auf die andere Art, das häufigste Element * basierend auf * zählen zu wollen. – tadman
- 1. erzeugen mehrere Datensätze nach der Anzahl der Elemente des Arrays
- 2. Array-Eingabe ohne Frage Anzahl der Elemente des Arrays
- 3. Gibt die Anzahl der nicht leeren Elemente aus verschachtelten Arrays
- 4. Anzahl der Elemente, die einen Wert in Ruby haben
- 5. Seq Anzahl der Elemente
- 6. Holen häufigsten Array innerhalb eines mehrdimensionalen Arrays
- 7. Anzahl der Elemente, die eine Beziehung
- 8. Hash der Arrays in Ruby
- 9. Die Anzahl der Elemente im Array zählen
- 10. C - Bei zwei gegebenen Arrays, wie finden Sie die Anzahl der einzelnen Elemente eines Arrays?
- 11. Suche nach der häufigsten Elemente in einem Vektor in R
- 12. PHP Array: sum Elemente der Arrays
- 13. Festlegen einer festen Anzahl von Elementen eines Arrays in Ruby
- 14. Das Produkt einer variablen Anzahl von Ruby-Arrays finden
- 15. Anzahl der Elemente in NSMutableArray
- 16. RecyclerView Anzahl der sichtbaren Elemente
- 17. Symfony Anzahl der Elemente (Nachrichten)
- 18. Anzahl der Elemente in ArrayList
- 19. Holen Sie die am häufigsten vorkommende Anzahl unter mehreren ganzen Zahlen ohne Verwendung von Arrays
- 20. mehrdimensionale Arrays Arrays innerhalb eines Arrays in Ruby
- 21. Ruby: Wie verbinde ich Elemente eines Arrays mit einem Präfix?
- 22. drucke Elemente mit gleichem Index, aber aus verschiedenen Arrays Ruby
- 23. Anzahl der Elemente des Arrays weniger als jedes Element der Cutoff-Array in Python
- 24. Verwenden von Arrays in ListView-Adapter Deklaration der Anzahl der Elemente
- 25. Anzahl der Vorkommen jeder Ziffer in Anzahl mit Arrays
- 26. Kombinieren Arrays in Ruby
- 27. numpy - Anzahl gleicher Arrays
- 28. sammeln alle Elemente und Indizes eines Arrays in zwei getrennten Arrays in Ruby
- 29. Anzahl der Scaffolds zählen Ruby on rails
- 30. Ruby hängt an Arrays
Dass diese Frage ein Duplikat ist, ist kaum überraschend. Es ist jedoch nicht klar, um welche Frage es sich handelt. Mein Lesen der Frage ist, dass die maximale Anzahl zurückgegeben werden soll ("... wie finde ich eine Zählung des häufigsten Elements in einem Array ..."). (Siehe @ Tadmans Kommentar zu meiner Antwort.) Die Quelle von "Diese Frage hat hier bereits eine Antwort:" fragt nach dem Element, dessen Anzahl am größten ist. Zugegeben, es ist ein sehr kurzer Schritt von der Antwort zu dieser Frage bis zum Erhalten der maximalen Zählung, aber es kann bessere Wege geben, wenn nur die maximale Zählung gewünscht wird. –