9 Stimmen

C# - Entfernen Sie ein Element aus der Liste der KeyValuePair

Wie kann ich ein Element aus der Liste von KeyValuePair entfernen?

18voto

JaredPar Punkte 699699

Wenn Sie sowohl den Schlüssel als auch den Wert haben, können Sie wie folgt vorgehen

public static void Remove<TKey,TValue>(
  this List<KeyValuePair<TKey,TValue>> list,
  TKey key,
  TValue value) {
  return list.Remove(new KeyValuePair<TKey,TValue>(key,value)); 
}

Dies funktioniert, weil KeyValuePair<TKey,TValue> überschreibt nicht die Gleichheit, sondern ist eine Struktur. Das bedeutet, dass es den Standardwert Gleichheit verwendet. Dieser vergleicht einfach die Werte der Felder, um auf Gleichheit zu testen. Sie müssen also einfach eine neue KeyValuePair<TKey,TValue> Instanz mit den gleichen Feldern.

EDITAR

Um einem Kommentator zu antworten: Welchen Wert hat hier eine Verlängerungsmethode?

Die Rechtfertigung ist am besten im Code zu sehen.

list.Remove(new KeyValuePair<int,string>(key,value));
list.Remove(key,value);

Auch für den Fall, dass entweder der Schlüssel- oder der Werttyp ein anonymer Typ ist, ist eine Erweiterungsmethode erforderlich.

EDIT2

Hier ist ein Beispiel dafür, wie man KeyValuePair, wo einer der 2 hat einen anonymen Typ zu erhalten.

var map = 
  Enumerable.Range(1,10).
  Select(x => new { Id = x, Value = x.ToString() }).
  ToDictionary(x => x.Id);

Die variable Karte ist eine Dicitonary<TKey,TValue> donde TValue ist ein anonymer Typ. Die Aufzählung der Map erzeugt ein KeyValuePair mit dem TValue die denselben anonymen Typ haben.

10voto

Derek Greer Punkte 14335

Hier sind ein paar Beispiele für das Entfernen eines Elements aus einer Liste von KeyValuePair:

// Remove the first occurrence where you have key and value
items.Remove(new KeyValuePair<int, int>(0, 0));

// Remove the first occurrence where you have only the key
items.Remove(items.First(item => item.Key.Equals(0)));

// Remove all occurrences where you have the key
items.RemoveAll(item => item.Key.Equals(0));

EDITAR

// Remove the first occurrence where you have the item
items.Remove(items[0]);

3voto

Jamie Ide Punkte 46985

Um alle Elemente in der Liste nach Schlüssel zu entfernen:

myList.RemoveAll(x => x.Key.Equals(keyToRemove));

2voto

cloggins Punkte 659

Sie sollten in der Lage sein, .Remove(), .RemoveAt() oder eine der anderen Methoden zu verwenden.

0voto

3Dave Punkte 27742
    List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
    KeyValuePair<string, string> kvp = list[i];
    list.Remove(kvp);

oder

    list.Remove(list[1]);

Sie müssen einen Verweis auf das Objekt erhalten, das Sie entfernen möchten - deshalb habe ich das gesuchte Element gefunden und einem KeyValuePair zugewiesen - da Sie ihm sagen, dass es ein bestimmtes Element entfernen soll.

Eine bessere Lösung könnte die Verwendung eines Wörterbuchs sein:

    Dictionary<string, string> d = new Dictionary<string, string>();
    if (d.ContainsKey("somekey")) d.Remove("somekey");

Auf diese Weise können Sie nach dem Schlüsselwert entfernen, anstatt sich damit auseinandersetzen zu müssen, dass die Liste nicht durch den Schlüssel indiziert ist.

Éditer müssen Sie nicht unbedingt zuerst eine KeyValuePair-Referenz erhalten. Dennoch ist ein Wörterbuch wahrscheinlich ein besserer Weg zu gehen.

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