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

如何实现Dictionary<string, object>异构容器的递归展平遍历函数

问题根因

你当前写的flatten函数的核心问题是:递归调用flatten(subDict)时,没有遍历递归返回的枚举结果并逐个返回,嵌套字典中的键值对全部没有被纳入最终的返回序列,所以得到的结果不符合预期。

修正后实现(无需依赖LINQ的SelectMany)

public IEnumerable<KeyValuePair<string, object>> flatten(IDictionary<string, object> dict)
{
    foreach(KeyValuePair<string, object> item in dict)
    {
        if (item.Value is IDictionary<string, object> subDict)
        {
            // 迭代递归返回的所有子键值对,逐个返回
            foreach (var subItem in flatten(subDict))
            {
                yield return subItem;
            }
        }
        else
        {
            yield return item;
        }
    }
}

逻辑说明

  1. 遍历输入字典的每一组键值对
  2. 若当前值为IDictionary<string, object>类型的嵌套字典,就递归调用flatten方法处理该嵌套字典,再把递归得到的所有子键值对逐个yield返回
  3. 若当前值不是字典类型,直接yield返回当前键值对

执行var l = flatten(d).ToList();后,得到的列表就会包含key1、key2、key3对应的3个元素,完全满足需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:39:01