Ich habe das folgende Array von Zahlen in Ruby (höher ist besser), und ich möchte sie ordnen. Mit anderen Worten, ich möchte die folgende sortierte Liste konvertieren:
%Vor%zu den folgenden Rängen:
%Vor%Zum Beispiel bekommt der Gewinner den ersten Platz, es gibt einen Gleichstand für den zweiten Platz und so weiter. Der wichtige Punkt ist natürlich, dass Verbindungen möglich sind und diese Verbindungen dann die entsprechenden Ränge überspringen müssen. Eine beliebige Anzahl von Verbindungen ist möglich (3 Personen teilen sich den zweiten Platz).
Gibt es eine elegante Möglichkeit, diese Art von Operation durchzuführen?
Verwenden Sie Enumerable#each_with_index
um zu vermeiden, dass Sie die Array für jede Iteration:
Edit: Ich denke, ich sollte auch meinen Benchmark, hier sind die Ergebnisse
%Vor%Nicht der beste, aber immer noch einen guten Kampf!
Ich weiß nicht über "elegant", aber hier ist eine kurze, lesbare, super-unkomplizierte Lösung:
%Vor%Ich denke, wir machen das ...
Bearbeiten: Dieser Beitrag wurde viel zu lang, deshalb habe ich den Benchmark-Code in einen Gist verschoben: Ссылка
Hier sind die Ergebnisse:
%Vor%Edit: Ich hatte einige Sachen hier über Enumerator :: Lazy < a, aber es stellt sich heraus, dass ich es falsch benutzt habe. Es hat die Performance in keinem Fall verbessert.
Ein anderer Weg, der Enumerable # chunk verwendet.
Code
%Vor%Beispiel
%Vor%Erläuterung
Für das Array a
oben: