Neuanordnen einer Liste von positions-Elementen
Ich habe ein Anfrage-Objekt enthält eine Liste von Genehmigenden Personen. Eine genehmigende Person hat einen Namen und eine Genehmigung position.
- Mathew
- Mark
- Lukas
- John
Letztlich wird die Anfrage auf dem Weg durch diese Kette, beginnend bei Mathew und endete an John.
Ich muss in der Lage sein, um die Reihenfolge dieser ermöglicht hinzufügt und löscht, wie unten beschrieben.
Genehmigende Person kann -
Hinzugefügt, um eine bestimmte position - ie. Fügen Sie Peter an position 3 in dem Fall, dass der neue Auftrag würde
- Mathew
- Mark
- Peter
- Lukas
- John
Löschen - ie. Löschen Markieren Sie in dem Fall, dass der neue Auftrag ist
- Mathew
- Lukas
- John
Bearbeitet - sprich Sie ändern können, John " auf die position 1 in dem Fall, dass der neue Auftrag ist
- John
- Mathew
- Mark
- Lukas
Ich habe mit einer Reihe von Lösungen, aber keiner von Ihnen ist besonders elegant.
Jede Hilfe wäre sehr geschätzt werden
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie groß sind die Listen wahrscheinlich?
List<T>
ist wahrscheinlich die einfachste Darstellung der Sammlung, aber es bedeutet, dass eine Kopie benötigt wird jedes mal, wenn Sie in einfügen oder entfernen aus der Mitte der Liste. "Bearbeiten" wird die Liste im Grunde bedeutet ein entfernen/einfügen.Iteration ist dann einfach.
Eine alternative könnte sein,
LinkedList<T>
- die macht der iteration der einfachen und "danach einfügen", "davor einfügen" und "löschen" Billig wenn Sie hängen auf derLinkedListNode<T>
, die mit jedem Ihrer Genehmiger. Aber es macht es nicht einfach zu sagen "dies Rezensenten sollten sich nun an der position 3" - würden Sie haben zu Durchlaufen, um zu finden, die position, die ersten 3 (oder 2, sowieso). Wenn es ein Fall von "verschieben Sie diese Genehmiger "nach diesem", dann ist es ideal.Aufrechterhaltung einer position-Eigenschaft ist ein Schmerz, wie Sie brauchen, um machen eine Menge von änderungen, um etwas zu ändern (und dabei alles logisch). Es macht es auch schwer zu serialisieren/Deserialisieren effizient.
Kann man nicht einfach ableiten, die position von der position in einem
List<T>
oder ähnliches? Dann können SieAdd()
zu Ende,Insert()
in die Mitte undRemove()
von überall. Etwas zu bewegen Sie einfachRemove()
es undInsert()
es an die gewünschte position?So (formatiert für Leerzeichen):