c#组表现词典

时间:2013-08-20 14:48:40

标签: c# linq data-structures dictionary lookup-tables

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

*这是最有效的方式(就速度而言)吗?或者还有其他方式吗?

使用.ContainsKey()

检查密钥的时间复杂度是多少呢?

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

2 个答案:

答案 0 :(得分: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 });