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; }
改动说明
- 移除了方法内自行创建的
dic对象,直接使用方法参数dictionary,确保处理的是外部传入的目标数据 - 将原有的"判断是否存在再添加一次"逻辑,替换为循环添加:对每个键值对,循环
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
相关产品推荐
相关产品推荐

