6 Stimmen

Wie entfernt man alle Objekte aus List<object>, bei denen object.variable mindestens einmal in einem anderen object.variable2 vorkommt?

Ich habe Schwierigkeiten herauszufinden, wie man diesen Code schreibt.

Ich habe eine Liste von Elementen, die alle eine ID haben. Außerdem gibt es einen weiteren Wert, den wir otherID nennen. Wenn otherID Null oder Null ist, wird er ignoriert. Wenn otherID jedoch die ID eines anderen Elements in der Liste enthält, möchte ich dieses Element aus der Liste entfernen.

Beispiel:

item1.ID = 5, item1.otherID = null
item2.ID = 6, item2.otherID = 5
item3.ID = 7, item3.otherID = null

Element1 sollte also aus der Liste entfernt werden, da seine ID im Feld otherID von Element2 enthalten ist.

Weiß jemand, wie ich das schreiben soll?

11voto

Ani Punkte 107342

Eine Möglichkeit dazu wäre ein zweistufiger Prozess:

  1. Bauen Sie eine einstellen. von Ids, die entfernt werden müssen.
  2. Entfernt Elemente aus der Liste, deren Id's in der schwarzen Liste vorhanden sind.

Dies erfordert zwei Durchläufe der Liste. Da das Hinzufügen zu einem HashSet / das Testen, ob es ein Element enthält sollte eine Operation mit konstanter Zeit ist, sollte die gesamte Operation in linearer Zeit ablaufen.

var idsToBeRemoved = new HashSet<int?>(list1.Select(item => item.otherID)
                                            .Where(otherId => otherId.HasValue));

list1.RemoveAll(item => idsToBeRemoved.Contains(item.ID));

EDIT: Aktualisiert Id Typs auf int? nach Klärung durch den Auftraggeber.

8voto

SLaks Punkte 832502

Zum Beispiel so:

list.RemoveAll(r => list.Any(o => o != r && r.ID == o.otherID));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X