0

我正在编写一个需要使用的程序, Dictionary<TKey,groupimplementation<TValue>>例如我使用的是Dictionary<TKey,List<TValue>>,每次我需要添加项目时,如果密钥不存在,我需要初始化一个类型为 t 的列表,如果它存在,我只需要访问列表并添加项目。

*这是最有效的方法(在速度方面)吗?还是有其他方法?

另一件事是使用检查密钥的时间复杂度是多少.ContainsKey()

顺便说一句,我不能使用 iLookup,因为它是不可变的,初始化一个的唯一方法是从.tolookup()方法

4

2 回答 2

3

这是最有效的方法(就速度而言)吗?还是有其他方法?

在将项目添加到列表之前,您必须对其进行初始化(如果列表尚未初始化)。只看你的描述(不是代码)我只能猜测它很好。为了检查密钥是否存在,您使用ContainsKey的是O(1)复杂的。

使用 .ContainsKey() 检查密钥的时间复杂度是多少

Dictionary<TKey, TValue>.ContainsKey方法 - MSDN

此方法接近O(1)操作。

于 2013-08-20T14:51:05.813 回答
2

访问和修改字典值的最有效方法是使用它的TryGetValue方法。

因此,如果您首先检查它是否包含给定的密钥,则只需要访问一次而不是两次。

例如:

List<TValue> theList;
if (dictionary.TryGetValue(theKey, out theList))
    theList.Add(newItem);
else
    dictionary.Add(theKey, new List<TValue> { newItem });
于 2013-08-20T14:57:09.473 回答