2

質問は、タイトル自体から明らかなはずです。項目がディクショナリに存在するかどうかを確認し、C# のディクショナリから削除する必要があります。唯一の問題は、キーではなく値アイテムのみを使用してこれを行う必要があることです。

宣言は以下の通りです。

IDictionary<string, myCustomClassObject> clients = new IDictionary<string, myCustomClassObject>();

今、私は次のように辞書に記入します:

clients["key"] = myCustomClassObject1;

myCustomClassObject1辞書からこのアイテムを見つけて削除するにはどうすればよいですか。キーではなく値アイテムのみを使用したい

これは可能ですか...そうであれば、ガイドしてください...よろしく

編集:ありがとうございました....貴重なコメントをいただきました...おそらくやるべきことを考えています...ありがとう

4

5 に答える 5

1

これでうまくいくはずです。指定された値を持つすべてのクライアントを削除します。

while (clients.ContainsValue(myCustomClassObject1))
    clients.Remove(clients.Where(x => x.Value == myCustomClassObject1).FirstOrDefault().Key);

または、削除したい値なしで新しい辞書を作成します

clients = clients.Where(x => x.Value != myCustomClassObject1).ToDictionary(k => k.Key, v => v.Value);
于 2013-09-20T09:03:44.393 に答える
1

コレクションに値を削除するアイテムが 1 つしか含まれていない場合は、ここで他の回答のいずれかを使用できます。これは問題なく機能します。

ただし、コレクションに同じ値を持つアイテムが複数ある場合は注意が必要です。

コレクションを反復処理中にコレクションを変更することはできないため、削除するすべてのアイテムのキーを 1 つのループで見つけてリストに入れ、別のループでそのリストを反復処理して削除する必要があります。アイテム。

例えば:

using System;
using System.Collections.Generic;
using System.Linq;

namespace Demo
{
    class Program
    {
        void run()
        {
            var dict = new Dictionary<string, int>
            {
                {"Key1", 1}, 
                {"Key2", 2}, 
                {"Key3", 3}, 
                {"Key4", 2}, 
                {"Key5", 4}
            };

            int valueToRemove = 2;

            var keysToRemove = (from element in dict
                                where element.Value == valueToRemove
                                select element.Key).ToList();

            foreach (var key in keysToRemove)
                dict.Remove(key);

            foreach (var element in dict)
                Console.WriteLine("Key = {0}, Value = {1}", element.Key, element.Value);
        }

        static void Main(string[] args)
        {
            new Program().run();
        }
    }
}
于 2013-09-20T09:15:55.687 に答える