Подтвердить что ты не робот

Поиск уже существующего значения в паре ключей

Я сохраняю строку и значение int в паре значений ключа.

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

При добавлении мне нужно проверить, существует ли строка (Key) уже в списке, если существует, мне нужно добавить ее в значение вместо добавления нового ключа.
Как проверить и добавить?

4b9b3361

Ответ 1

Вместо списка вы можете использовать Dictionary и проверить, не содержит ли он key, затем добавьте новое значение в существующий ключ

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

Ответ 2

используйте диктатор. Словарь в С#, и я предлагаю вам прочитать это сообщение Dictonary in.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);

чтобы проверить. use ContainsKey ContainsKey

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

Ответ 3

Если вам нужен список, вы должны просмотреть список и искать ключи. Просто, вы можете использовать hashtable.

Ответ 4

Ваши потребности точно описывают дизайн 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";

Ответ 5

Конечно, словарь предпочтительнее в вашем случае. Вы не можете изменить значение класса 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
        }

который звучит не очень хорошо.

надеюсь, что эта информация поможет.