ruby: Sortieren! und uniq! Die zum ersten mal ausgeführt?
Muss ich laufen, beide sort!
und uniq!
auf ein array. Was ist besser zu laufen als der erste? Oder gibt es eine Möglichkeit, kombinieren diese in einem Befehl?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich machte einen kleinen benchmark-test mit verschiedenen Kombinationen von uniq uniq! Sortieren und Sortieren!
Es gibt keine signifikanten Unterschiede:
Was Sie vielleicht nicht verwenden, ist so etwas wie:
uniq! Ergebnis null und Sortieren! wird eine Ausnahme ausgelöst.
Den benchmark verwendet habe ich:
.uniq!.sort!
.uniq.sort!
und.sort!.uniq!
ist stark abhängig von den zu sortierenden Daten. Sie sind Tests, die gleichen Pseudo-array immer und immer wieder, wenn es also sehr wenige Elemente duplizieren (was ich denke ist hier der Fall), die Wirkung vonuniq
wird vernachlässigbar sein.In der Tat, es hängt von der Anzahl der eindeutigen Werte.
In dem Beispiel von knut, dem start-set könnte gehören bei den meisten 365 einzigartige Werte aus 1000, und die Reihenfolge der Operationen schien ohne Einfluss.
wenn 'uniq' reduziert die array-Größe, es ist ein deutlicher Vorteil in der Durchführung zuerst.
Habe ich nicht testen '.uniq!.Art!' Permutationen, aber ich glaube, dass Sie sollten Folgen Sie dem obigen Ergebnis.
Diesem Beispiel vielleicht ein wenig extrem, aber ich sehe nicht, warum sollte man nicht immer ausführen '.uniq' erste
Es ist wirklich egal, welchen Weg Sie dies tun. Ich denke, die uniq ersten, so dass Sie Ergebnisse in weniger Elemente zu Sortieren, mit einem Durchlauf durch das array. So können Sie tun,
array_name.uniq!.sort!
? Oder ist der erste!
unnötig?uniq
, und dann diese Kopie wird ersetzt durchsort!
. Also, wenn Sie wollen, zu Sortieren und die uniq Sie haben beideuniq!
undsort!
. Versuchen Sie es in irb und test mitequal?
.!
bedeuten, endet das Programm mit mehr Speicher, da wird es nicht tun Sie es in Stelle? (Versucht zu lernen, so viel wie ich kann)Dem ein oder der anderen, hängt von den Anforderungen Ihrer Anwendung.
1), es sei denn, Sie haben riesige arrays, laufen die ersten, die am meisten Sinn macht. Verwenden Sie die sortiert oder uniqued array anderswo? Kennt einer Bestellung entsprechen selbstverständlich der Logik der Anwendung.
2) Wenn Sie haben, huge arrays, und ich meine wirklich riesige, basierend auf einer real gemessenen Bestimmung, dass der code dauert zu lange in Betrieb
array.sort!.uniq!
dann könnten Sie versuchen, den anderen um und sehen. Wenn Sie eine Menge von Duplikaten, dannarray.uniq!.sort!
vielleicht marginal schneller sein.3) Wenn Sie besorgt über die Geschwindigkeit, die Sie wahrscheinlich verwenden wollen
sort_by
. Sehen Sie zum Beispiel, https://github.com/JuanitoFatas/fast-ruby/blob/master/code/enumerable/sort-vs-sort_by.rbDate
s, so dass ich nicht definieren die Art (DH ich bin nur mitarray_name.sort!
ohnesort{how to sort}
. Würdesort_by
noch ein Vorteil sein? Wenn ja, was würde ich pass insort_b
y?Array#uniq!
zurücknil
wenn das array ist schon einzigartig, aber tunarray.uniq.sort!
ist nicht zu erreichen, was David gefragt.array
nicht sortiert werden.