我正在编写一个需要使用的程序
Dictionary<TKey,groupimplementation<TValue>>
例如我使用的是Dictionary<TKey,List<TValue>>
,每当我需要添加项目时,我需要初始化类型为t的列表,如果密钥不存在,如果它存在,我只需要访问列出并添加项目。
*这是最有效的方式(就速度而言)吗?或者还有其他方式吗?
使用.ContainsKey()
顺便说一下我不能使用iLookup,因为它是不可变的,初始化一个的唯一方法是来自.tolookup()
方法
答案 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 });