web-dev-qa-db-ja.com

キーと値のペアで既存の値を見つける

キーと値のペアに文字列と整数値を保存しています。

var list = new List<KeyValuePair<string, int>>();

リストにstring(Key)が既に存在するかどうかを確認する必要がある場合、新しいキーを追加する代わりにValueに追加する必要があります。
チェックと追加の方法は?

21
Olivarsham

Listの代わりに Dictionary を使用し、それが keysを含む かどうかを確認してから、新しい値を既存のキーに追加できます

int newValue = 10;
Dictionary<string, int> dictionary = new Dictionary<string, int>();
if (dictionary.ContainsKey("key"))
    dictionary["key"] = dictionary["key"] + newValue;
30
Habib

辞書を使用します。 C#の辞書 この記事を読むことをお勧めします 。netの辞書

Dictionary<string, int> dictionary =
        new Dictionary<string, int>();
    dictionary.Add("cat", 2);
    dictionary.Add("dog", 1);
    dictionary.Add("llama", 0);
    dictionary.Add("iguana", -1);

チェックする。 ContainsKeyを使用します ContainsKey

if (dictionary.ContainsKey("key"))
    dictionary["key"] = dictionary["key"] + yourValue;
7
Ravi Gadag

リストを使用する必要がある場合は、リストをforeachし、キーを探す必要があります。単純に、ハッシュテーブルを使用できます。

5
Jhonny

確かに、辞書はあなたの場合に望ましいです。 _KeyValue<string,int>_クラスの値は変更できないため、変更できません。

ただし、List<KeyValuePair<string, int>>();を使用する場合でも。 _IEqualityComparer<KeyValuePair<string, int>>_を使用できます。コードは次のようになります。

_public class KeyComparer : IEqualityComparer<KeyValuePair<string, int>>
{

    public bool Equals(KeyValuePair<string, int> x, KeyValuePair<string, int> y)
    {
        return x.Key.Equals(y.Key);
    }

    public int GetHashCode(KeyValuePair<string, int> obj)
    {
        return obj.Key.GetHashCode();
    }
}
_

そして、次のものを含む

_var list = new List<KeyValuePair<string, int>>();
        string checkKey = "my string";
        if (list.Contains(new KeyValuePair<string, int>(checkKey, int.MinValue), new KeyComparer()))
        {
            KeyValuePair<string, int> item = list.Find((lItem) => lItem.Key.Equals(checkKey));
            list.Remove(item);
            list.Add(new KeyValuePair<string, int>("checkKey", int.MinValue));// add new value
        }
_

これはいい方法ではありません。

この情報がお役に立てば幸いです。

4
D J

あなたのニーズは Dictionary sの設計を正確に記述していますか?

Dictionary<string, string> openWith = 
        new Dictionary<string, string>();

// Add some elements to the dictionary. There are no  
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");

// If a key does not exist, setting the indexer for that key 
// adds a new key/value pair.
openWith["doc"] = "winword.exe";
4
Karthik T

Listを使用しなければならない人(Dictionaryは使用しないため、私にとってはそうでした)には、ラムダ式を使用してListにキーが含まれているかどうかを確認できます。

list.Any(l => l.Key == checkForKey);
1
WATYF