Как назначить пары ключ => значение в словаре? - PullRequest
4 голосов
/ 16 февраля 2012

Вот мой код:

string[] inputs = new[] {"1:2","5:90","7:12","1:70","29:60"};

//Declare Dictionary
var results = new Dictionary<int, int>();
//Dictionary<int, int> results = new Dictionary<int, int>();

foreach(string pair in inputs)
{
    string[] split = pair.Split(':');
    int key = int.Parse(split[0]);
    int value = int.Parse(split[1]);

    //Check for duplicate of the current ID being checked
    if (results.ContainsKey(key))
    {
        //If the current ID being checked is already in the Dictionary the Qty will be added
        //Dictionary gets Key=key and the Value=value; A new Key and Value is inserted inside the Dictionary
        results[key] = results[key] + value;
    }
    else
    {
        //if No duplicate is found just add the ID and Qty inside the Dictionary
        results[key] = value;
        //results.Add(key,value);
    }
}

var outputs = new List<string>();
foreach(var kvp in results)
{
    outputs.Add(string.Format("{0}:{1}", kvp.Key, kvp.Value));
}

// Turn this back into an array
string[] final = outputs.ToArray();
foreach(string s in final)
{
    Console.WriteLine(s);
}
Console.ReadKey();

Я хочу знать, есть ли разница между назначением пары ключ => значение в словаре.

Method1:

results[key] = value;

Method2:

results.Add(key,value);

В методе 1 функция Add () не была вызвана, но вместо этого словарь с именем 'results' присваивает каким-то образом пару Key-Value, устанавливая код в method1, я предполагаю, что она каким-то образом добавляет ключ и значение в словарь автоматически без вызова Add ().

Я спрашиваю об этом, потому что сейчас я студент и сейчас изучаю C #.

Сэр / мэм, ваши ответы были бы очень полезны и получили бы высокую оценку. Спасибо ++

Ответы [ 2 ]

6 голосов
/ 16 февраля 2012

Метод set индексатора Dictionary<TKey, TValue> (тот, который вызывается при выполнении results[key] = value;) выглядит следующим образом:

set
{
    this.Insert(key, value, false);
}

Метод Add выглядит следующим образом:

public void Add(TKey key, TValue value)
{
    this.Insert(key, value, true);
}

Единственное отличие состоит в том, что если третий параметр имеет значение true, он выдаст исключение, если ключ уже существует.

Примечание: декомпилятор - второй лучший друг разработчиков .NET (первый, конечно, отладчик). Этот ответ пришел с открытия mscorlib в ILSpy.

5 голосов
/ 16 февраля 2012

Если ключ существует в 1), значение перезаписывается.Но в 2) это вызовет исключение, так как ключи должны быть уникальными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...