簡體   English   中英

如何使用該值從字典中刪除條目

[英]How to delete entries from a dictionary using the value

我有一個詞典集合作為bleow:

mydic.addvalue(key1, val1)
mydic.addvalue(key2, val1)
mydic.addvalue(key3, val1)
mydic.addvalue(key4, val2)
mydic.addvalue(key5, val2)

從上面的字典我想刪除值==“val1”的所有條目,以便結果只有以下條目:

mydic.addvalue(key4, val2)
mydic.addvalue(key5, val2)

我的VB源代碼在VS2008上,目標是3.5

首先需要找到關聯值為val1所有鍵:

var keysToRemove = mydic.Where(kvp => kvp.Value == val1)
                        .Select(kvp => kvp.Key)
                        .ToArray();

然后你可以刪除每個鍵:

foreach (var key in keysToRemove)
{
    mydic.Remove(key);
}

基於用戶評論的非LINQ答案。

private static void RemoveByValue<TKey,TValue>(Dictionary<TKey, TValue> dictionary, TValue someValue)
{
    List<TKey> itemsToRemove = new List<TKey>();

    foreach (var pair in dictionary)
    {
        if (pair.Value.Equals(someValue))
            itemsToRemove.Add(pair.Key);
    }

    foreach (TKey item in itemsToRemove)
    {
        dictionary.Remove(item);
    }
}

用法示例:

Dictionary<int, string> dictionary = new Dictionary<int, string>();
dictionary.Add(1, "foo");
dictionary.Add(2, "foo");
dictionary.Add(3, "bar");
string someValue = "foo";
RemoveByValue(dictionary, someValue);

與其他答案一樣的警告:如果您的值通過引用確定相等性,則您需要做額外的工作。 這只是一個基礎。

你也可以使用

var x= (from k in mydic
           where k.Value != val1
           select k).ToDictionary(k=>k.key);

x將不具有任何val1

foreach(var key in dict.AllKeys.ToArray())
{
    if(...)
        //remove key or something
}

它的答案很古老,但這就是我如何在不創建另一個詞典的情況下做同樣的事情。

foreach (KeyValuePair<TKey, TValue> x in MyDic) {

  if (x.Value == "val1")) 
  {  MyDic.Remove(x.Key); } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM