c#lambda dictionary,char []选择项目

时间:2018-03-12 03:42:34

标签: c# arrays linq dictionary

我不是最好的lambda可以任何人教我如何使用字符数组从字典中选择项目。

说我有一本字典;

Dictionary<char, int> someDictionary:

我有一个字符数组;

char[] someCharacterArray;

如何使用存储在char数组中的键集合从字典中选择项目;

someOtherDictionary = someDictionary.select( d =>
    someCharacterArray.contains(d.key)).toDictionary();

我知道这当然不起作用,但它展示了我想要的东西。

希望我的问题很清楚,但我整夜都很清醒所以请对我温柔:)

提前谢谢, 达伦。

2 个答案:

答案 0 :(得分:2)

如果要检查char是否包含在Dictionary中。

使用where方法

ToDictionary应设置keyvalue Func代理

根据你的问题,你可能想要这样。

Dictionary<char, int> someOtherDictionary = someDictionary
            .Where(d => someCharacterArray.Contains(d.Key))
            .ToDictionary(o=> o.Key, o=>o.Value);

修改

这在数据结构中会更快。 (感谢@TypeIA)

Dictionary<char, int> someOtherDictionary = someCharacterArray
                .Where(ch => someDictionary.ContainsKey(ch))
                .Select(ch => new { key = ch, value = someDictionary[ch] })
                .ToDictionary(o => o.key, o => o.value);

答案 1 :(得分:0)

此类问题需要Join

    Dictionary<char, int> someDictionary = new Dictionary<char,int>
    {
        {'A',1},
        {'B',2},
        {'C',3},
        {'D',4}
    };


    char[] someCharacterArray = new [] {'A','B','C','E'};


    var filteredDictionary = someDictionary
        .Join
        (
            someCharacterArray, 
            d => d.Key, 
            c => c, 
            (d,c) => new { Key = d.Key, Value = d.Value}
        )
        .ToDictionary
        (
            k => k.Key, 
            v => v.Value
        );

    Console.WriteLine(string.Join("\r\n", filteredDictionary.Select(d => string.Format("{0}={1}", d.Key, d.Value))));

输出:

A=1
B=2

Code on DotNetFiddle