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

C#中Dictionary转List时,如何按值的数量重复输出对应键?

解决方法

你的代码存在两个核心问题:

  • DictionaryToList方法里自行创建了新字典,完全没用到传入的dictionary参数,等于外部传入的数据根本没被处理
  • 循环逻辑只给每个键添加一次,没有根据对应数值重复添加键

修改后的DictionaryToList方法如下:

public IList<string> DictionaryToList(IDictionary<string, int> dictionary)
{
    IList<string> lst = new List<string>();
    
    // 遍历传入的目标字典,而非自行创建的字典
    foreach (var item in dictionary)
    {
        // 根据值的大小循环添加对应键
        for (int i = 0; i < item.Value; i++)
        {
            lst.Add(item.Key);
        }
    }
    return lst;
}

改动说明

  1. 移除了方法内自行创建的dic对象,直接使用方法参数dictionary,确保处理的是外部传入的目标数据
  2. 将原有的"判断是否存在再添加一次"逻辑,替换为循环添加:对每个键值对,循环item.Value次,每次将键加入列表,实现按数值重复输出的需求

完整可运行示例

假设你的Conversion类包含统计元素出现次数的ListToDictionary方法,完整代码如下:

public class Conversion
{
    public IDictionary<string, int> ListToDictionary(IList<string> list)
    {
        var dic = new Dictionary<string, int>();
        foreach (var item in list)
        {
            if (dic.ContainsKey(item))
                dic[item]++;
            else
                dic[item] = 1;
        }
        return dic;
    }

    public IList<string> DictionaryToList(IDictionary<string, int> dictionary)
    {
        IList<string> lst = new List<string>();
        
        foreach (var item in dictionary)
        {
            for (int i = 0; i < item.Value; i++)
            {
                lst.Add(item.Key);
            }
        }
        return lst;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var conversion = new Conversion();
        var list = new List<string> { "Demo1","Demo2","Demo3","Demo4","Demo1","Demo4"};
        var dictionary = conversion.ListToDictionary(list);
        
        Console.WriteLine("字典内容:");
        foreach (var item in dictionary)
        {
            Console.WriteLine($"{item.Key}, {item.Value}");
        }
        
        var convertedList = conversion.DictionaryToList(dictionary);
        Console.WriteLine("\n转换后的List:");
        foreach (var item in convertedList)
        {
            Console.WriteLine(item);
        }
        Console.ReadLine();
    }
}

运行后输出的列表内容为:

Demo1
Demo1
Demo2
Demo3
Demo4
Demo4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:06:25