【问题标题】:c# lambda dictionary, char[] selecting itemsc# lambda 字典,char[] 选择项目
【发布时间】:2018-03-12 03:42:33
【问题描述】:

我不是最擅长 lambda 的,谁能教我如何使用字符数组从字典中选择项目。

说我有一本字典;

Dictionary<char, int> someDictionary:

我有一个字符数组;

char[] someCharacterArray;

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

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

我知道这当然行不通,但它证明了我想要什么。

希望我的问题很清楚,但我整晚都没有睡,所以请对我温柔:)​​

提前致谢, 达伦。

【问题讨论】:

  • 这真的不是 lambda,它是 Linq。

标签: c# arrays linq dictionary


【解决方案1】:

如果您想检查 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);

【讨论】:

  • 根据数据结构中的内容,最好反过来 (someCharacterArray.Where(ch =&gt; someDictionary.ContainsKey(ch)).Select(ch =&gt; someDictionary[ch]))。
【解决方案2】:

这类问题需要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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多