如何在C#中从列表中筛选出仅出现一次的唯一值?
在C#中找出列表中仅出现一次的元素
需求说明
输入列表:['A', 'A', 'B', 'B', 'B', 'C', 'D', 'E', 'E', 'F']
期望输出:仅出现过一次的元素组成的列表 ['C', 'D', 'F']
实现方式一:使用LINQ(简洁高效)
借助LINQ的分组方法可以快速完成筛选,代码简洁易读:
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<char> input = new List<char> { 'A', 'A', 'B', 'B', 'B', 'C', 'D', 'E', 'E', 'F' }; List<char> result = input .GroupBy(element => element) .Where(group => group.Count() == 1) .Select(group => group.Key) .ToList(); // 验证输出 foreach (char item in result) { Console.WriteLine(item); } } }
逻辑说明:
GroupBy(element => element):将相同元素归类到同一分组Where(group => group.Count() == 1):过滤出仅包含单个元素的分组Select(group => group.Key):提取分组对应的原元素ToList():将结果转换为List类型
实现方式二:手动统计(无LINQ依赖)
如果项目限制使用LINQ,可以用字典手动统计元素出现次数,再筛选结果:
using System; using System.Collections.Generic; class Program { static void Main() { List<char> input = new List<char> { 'A', 'A', 'B', 'B', 'B', 'C', 'D', 'E', 'E', 'F' }; Dictionary<char, int> countMap = new Dictionary<char, int>(); // 统计每个元素的出现次数 foreach (char item in input) { if (countMap.ContainsKey(item)) { countMap[item]++; } else { countMap[item] = 1; } } // 筛选仅出现一次的元素 List<char> result = new List<char>(); foreach (var kvp in countMap) { if (kvp.Value == 1) { result.Add(kvp.Key); } } // 验证输出 foreach (char item in result) { Console.WriteLine(item); } } }
逻辑说明:
- 遍历输入列表,用字典记录每个元素的出现次数
- 遍历字典,收集出现次数为1的元素
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

