相关疑难解决方法(0)

合并C#中的词典

Dictionary<T1,T2>在C#中合并2个或更多字典()的最佳方法是什么?(像LINQ这样的3.0功能很好).

我正在考虑一种方法签名:

public static Dictionary<TKey,TValue>
                 Merge<TKey,TValue>(Dictionary<TKey,TValue>[] dictionaries);
Run Code Online (Sandbox Code Playgroud)

要么

public static Dictionary<TKey,TValue>
                 Merge<TKey,TValue>(IEnumerable<Dictionary<TKey,TValue>> dictionaries);
Run Code Online (Sandbox Code Playgroud)

编辑:从Jare​​dPar和Jon Skeet得到一个很酷的解决方案,但我正在考虑处理重复键的东西.在发生碰撞的情况下,只要它是一致的,将哪个值保存到dict并不重要.

c# merge dictionary

464
推荐指数
13
解决办法
26万
查看次数

这些Dictionary方法的复杂性是什么?

任何人都可以解释以下Dictionary方法的复杂性是什么?

ContainsKey(key)
Add(key,value);
Run Code Online (Sandbox Code Playgroud)

我想弄清楚我写的方法的复杂性:

public void DistinctWords(String s)
{
    Dictionary<string,string> d = new Dictionary<string,string>();
    String[] splitted = s.split(" ");
    foreach ( String ss in splitted)
    { 
        if (!d.containskey(ss))
            d.add(ss,null);
    } 
}
Run Code Online (Sandbox Code Playgroud)

我假设2个字典方法具有log(n)复杂度,其中n是字典中的键数.它是否正确?

c# complexity-theory time-complexity

19
推荐指数
4
解决办法
4万
查看次数

C# 字典等效于 Python 的 get() 方法

在 Python 中,如果我有一个 dict,并且我想从一个可能不存在密钥的 dict 中获取一个值,我会执行以下操作:

lookupValue = somedict.get(someKey, someDefaultValue)
Run Code Online (Sandbox Code Playgroud)

其中,如果someKey不存在,则someDefaultValue返回。

在 C# 中,有些TryGetValue()类似:

var lookupValue;
if(!somedict.TryGetValue(someKey, lookupValue))
    lookupValue = someDefaultValue;
Run Code Online (Sandbox Code Playgroud)

一个问题是,如果someKeynull然后抛出异常,所以你进行了空检查:

var lookupValue = someDefaultValue;
if (someKey != null && !somedict.TryGetValue(someKey, lookupValue))
    lookupValue = someDefaultValue;
Run Code Online (Sandbox Code Playgroud)

哪个,TBH,是 icky(3 行用于 dict 查找?)有没有更简洁(即 1 行)的方式,很像 Python 的get()

c# python dictionary

5
推荐指数
1
解决办法
1237
查看次数