24

文字列とint値をキーと値のペアで格納しています。

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

追加中に、string(Key)がリストにすでに存在するかどうかを確認する必要があります。存在する場合は、新しいキーを追加する代わりに、それをValueに追加する必要があります。
確認して追加する方法は?

4

6 に答える 6

34

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

int newValue = 10;
Dictionary<string, int> dictionary = new Dictionary<string, int>();
if (dictionary.ContainsKey("key"))
    dictionary["key"] = dictionary["key"] + newValue;
于 2013-01-23T05:38:25.137 に答える
7

dictonaryを使用します。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;
于 2013-01-23T05:37:33.697 に答える
5

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

于 2013-01-23T05:40:21.510 に答える
4

あなたのニーズはDictionarysのデザインを正確に説明していますか?

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";
于 2013-01-23T05:36:00.987 に答える
4

確かに、あなたの場合は辞書が望ましいです。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
        }

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

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

于 2013-01-23T06:07:52.390 に答える
3

リストを使用する必要がある場合(辞書では実行されないため、私の場合はそうです)、ラムダ式を使用して、リストにキーが含まれているかどうかを確認できます。

list.Any(l => l.Key == checkForKey);
于 2019-08-09T22:23:07.337 に答える