You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Dictionary数组中的所有键?无需遍历整个数组(可使用Linq)

解决字典数组获取所有键的问题

嘿,这个问题我太懂了!你踩的坑其实很典型:matrix是数组类型,不是单个Dictionary,所以直接调用matrix.Keys肯定会报错——数组本身根本没有Keys这个成员呀!

不过用Linq确实能写出非常简洁的代码,不用自己写嵌套的foreach循环。这里分两种常见场景给你方案:

1. 获取所有键(允许重复,处理可能的null字典)

因为你初始化的是new Dictionary<int, string>[10],数组里的每个元素默认都是null,所以第一步得先过滤掉这些空字典,避免空引用异常:

using System.Linq;

// 得到所有字典的键,包含重复项
var allKeys = matrix
    .Where(dict => dict != null)  // 跳过空字典
    .SelectMany(dict => dict.Keys);  // 把所有字典的键平铺成一个序列

2. 获取去重后的唯一键

如果多个字典可能有相同的键,你需要得到不重复的键集合,只需要在后面加上Distinct():

var uniqueKeys = matrix
    .Where(dict => dict != null)
    .SelectMany(dict => dict.Keys)
    .Distinct();

额外说明

  • 核心是SelectMany方法:它和Select的区别是,Select会把每个字典的键集合变成一个“集合的集合”,而SelectMany会把所有集合里的元素合并成一个单一的序列,这正是你需要的效果。
  • 如果能确保数组里的每个字典都已经被初始化(没有null),可以直接去掉Where(dict => dict != null)这一步,代码会更短。
  • 虽然Linq没有显式写foreach,但底层其实还是在遍历数组和每个字典的键——不过这已经是最简洁、最符合C#惯用写法的实现了,比手动写循环清爽多了。

内容的提问来源于stack exchange,提问作者Harshil Doshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:20:34