2013-08-20 4 views
0

Я пишу программу, которая должна использовать Dictionary<TKey,groupimplementation<TValue>>, например, что я использую Dictionary<TKey,List<TValue>>, каждый раз, когда мне нужно добавлять элементы, мне нужно инициализировать список типа t, если ключ doesn ' t существует, и если это нужно, мне нужно только получить доступ к списку и добавить элемент.C# Словарь групповой перфоманс

* Это самый эффективный способ (с точки зрения скорости) сделать это? или есть другой способ?

еще одна вещь, что сложность времени для проверки ключа с помощью .ContainsKey()

, кстати, я не могу использовать iLookup, так как это неизменное и единственный способ, чтобы инициализировать один происходит от .tolookup() Methode

+2

Почему? Предположительно, у вас проблемы с производительностью (по скорости)? И ты уверен, что это бутылочная шее? Сколько предметов? Как медленно? В принципе, что? –

+1

Речь идет о самом быстром, что вы могли бы сделать, если вам не нужно проверять, чтобы убедиться, что существование объекта в списке пронумеровано. – ars265

+0

@GrantThomas более 10 до 100+ миллионов элементов, типа

ответ

3

Это самый эффективный способ (с точки зрения скорости) сделать это? или есть там любым другим способом?

Перед добавлением в список вы должны инициализировать его (если список уже не инициализирован). Только глядя на ваше описание (не код) Я могу только догадываться, что все в порядке. Для проверки наличия ключа вы используете ContainsKey, который имеет сложность O(1).

что является сложность времени для проверки ключа с использованием .ContainsKey()

Dictionary<TKey, TValue>.ContainsKey Method - MSDN

Этот метод приближается к O (1) операцию.

+1

спасибо. –

2

Самый эффективный способ доступа и изменения значения словаря - использовать его метод TryGetValue.

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

Например:

List<TValue> theList; 
if (dictionary.TryGetValue(theKey, out theList)) 
    theList.Add(newItem); 
else 
    dictionary.Add(theKey, new List<TValue> { newItem }); 
+0

@Time Schmelter спасибо, что оба ответа были в порядке для меня, поэтому я выбираю голосование в настоящее время 3: 2. –