如何使用LINQ从字典列表中筛选唯一的TKey
如何用LINQ从字典列表中筛选唯一键?
嘿,要从你这个List<IDictionary<string, string>>里找出所有唯一的字典键,用LINQ组合几个方法就能轻松搞定,我给你拆解几种常见的场景:
基础版(默认区分大小写)
先把所有字典的键平铺成一个序列,再用Distinct()自动去重就行:var uniqueKeys = dictionaries .SelectMany(dict => dict.Keys) // 把每个字典的键拆成单个元素,合并成一个大序列 .Distinct(); // 去除重复的键这里默认是严格区分大小写的,比如
"Name"和"name"会被当成两个不同的键。不区分大小写的去重
如果需要忽略大小写差异,给Distinct()传一个字符串比较器就行:var uniqueKeysIgnoreCase = dictionaries .SelectMany(dict => dict.Keys) .Distinct(StringComparer.OrdinalIgnoreCase);用
OrdinalIgnoreCase是比较推荐的,它不依赖系统文化,只单纯忽略大小写;要是需要适配当前系统的文化规则,也可以换成StringComparer.CurrentCultureIgnoreCase。转成列表(按需使用)
如果最后需要的是List<string>类型的结果,在链尾加个ToList()就行:var uniqueKeyList = dictionaries .SelectMany(dict => dict.Keys) .Distinct() .ToList();安全版(处理可能的null字典)
要是列表里可能存在null的字典对象,记得先过滤掉,避免空引用异常:var uniqueKeysSafe = dictionaries .Where(dict => dict != null) // 先排除null的字典 .SelectMany(dict => dict.Keys) .Distinct();
内容的提问来源于stack exchange,提问作者gorrch
相关产品推荐
相关产品推荐

