Допустим, я читаю файл и подсчитываю статистику встречающихся там слов при помощи Dictionary<string,int>. Как мне это сделать наиболее правильно? Если определить словарь в вышеописанном типе, то приходится осуществлять поиск дважды, например, первый раз при проверке есть ли слово в словаре, а второй раз -- при увеличении счётчика слова на единицу.
Можно хранить в качестве значения простейший класс
class Wrapper {
int count;
public Wrapper(int count) { this.count = count; }
}
и тогда можно будет делать так
Dicntionary<string,Wrapper> dict = new Dictionary<string,Wrapper>();
Wrapper wrapper;
if( dict.TryGetValue(word, out wrapper) ) {
wrapper.count++;
}
else {
dict.Add(word, new Wrapper(1));
}
Но всё равно при добавлении слова поиск будет производиться дважды, а сам класс Wrapper уж какой-то сложный.
Нельзя ли как-то обойтись без Wrapper-а, например, при помощи типа типа (int?) (только этот тип не ссылочный).
И нельзя ли как-то сделать доабавление за один поиск?