C# - 从KeyValuePair列表中删除一个项目

时间:2009-10-22 17:12:36

标签: c# list

如何从KeyValuePair列表中删除项目?

5 个答案:

答案 0 :(得分:18)

如果您同时拥有密钥和值,则可以执行以下操作

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)); 
}

这是有效的,因为KeyValuePair<TKey,TValue>不会覆盖Equality但是是一个结构。这意味着它使用默认值相等。这只是比较字段的值来测试相等性。因此,您只需创建一个具有相同字段的新KeyValuePair<TKey,TValue>实例。

编辑

要回复评论者,扩展方法在这里提供了什么价值?

在代码中最好看到理由。

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

同样,在键或值类型是匿名类型的情况下,需要扩展方法。

<强> EDIT2

以下是如何获取KeyValuePair的示例,其中2个中的一个具有匿名类型。

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

变量映射是Dicitonary<TKey,TValue>,其中TValue是匿名类型。枚举地图将生成KeyValuePair,其中TValue具有相同的匿名类型。

答案 1 :(得分:9)

以下是从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));

修改

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

答案 2 :(得分:2)

应该能够使用.Remove(),. RemoveAt()或其他方法之一。

答案 3 :(得分:2)

按键删除列表中的所有项目:

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

答案 4 :(得分:0)

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

    list.Remove(list[1]);

您必须获取要删除的对象的引用 - 这就是为什么我找到了我正在查找并分配给KeyValuePair的项目 - 因为您要告诉它删除特定项目。

更好的解决方案可能是使用字典:

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

这允许您通过键值删除,而不必处理未被键索引的列表。

编辑您可能不必先获得KeyValuePair参考。不过,字典可能是一种更好的方式。