Sortierung eines Arrays von Objekten mit einer geordneten Liste von IDs

8

Ich habe eine Sammlung von Objekten @users , die jeweils ihr Attribut id haben.

%Vor%

Ich habe auch ein geordnetes Array von ids .

%Vor%

¿Gibt es eine magische Möglichkeit, die Sammlung mit dieser Liste von IDs zu sortieren? Ohne einen weiteren Aufruf an die Datenbank, wenn möglich.

Danke !!!

    
dgilperez 17.10.2011, 00:59
quelle

4 Antworten

11

Versuchen Sie es. Erstellen Sie zuerst eine umgekehrte Zuordnung von ID - & gt; Benutzer.

%Vor%

Verwenden Sie dann die IDs-Reihenfolge

%Vor%     
peakxu 17.10.2011, 01:08
quelle
18

In der Tat müssen Sie nicht sortieren, erstellen Sie einen Zwischenindex-Hash, es ist O (n):

%Vor%

Wenn Sie immer noch einen Sortieransatz versuchen wollten, wäre die Schwartzsche Transformation ausreichend:

%Vor%

Die Verwendung von index innerhalb einer Schleife ist jedoch eine rote Markierung: O (n ^ 2) Zeit. Wir können einen Zwischen-Hash erstellen, um zu O (n * log n) zurückzukehren:

%Vor%     
tokland 17.10.2011 08:12
quelle
1

Sie müssen sicher nicht zur DB gehen, da Sie bereits die User -Objekte haben. Obwohl die Benutzer sich in einem Array befinden, möchten Sie wahrscheinlich eine temporäre Karte erstellen von id = & gt; User , um das Endergebnis zu erhalten.

    
Dave Newton 17.10.2011 01:09
quelle
0

Wenn Sie auf die ID jedes Benutzers zugreifen können, indem Sie user.id aufrufen, können Sie das Array wie folgt sortieren:

%Vor%

Wenn Sie die IDs nur in einem separaten Array von den Objekten haben, können Sie Folgendes tun: Zip die zwei Arrays zusammen, sortieren Sie das resultierende Array auf die IDs und sammeln Sie dann die sortierten Benutzer aus dem Ergebnis.

%Vor%

Werfen Sie einen Blick darauf: Ссылка

    
Joe G 17.10.2011 01:27
quelle

Tags und Links