C#如何获取字符串列表中各重复元素最后一次出现的去重结果
实现方案
你可以根据场景选择以下两种常用实现方式:
- 方式1:双反转+Distinct 简洁实现
该方案代码量最少,适合纯值类列表的快速处理:
List<string> filterList = new List<string>() { "postpone", "access", "success", "postpone", "success" }; var result = filterList.AsEnumerable().Reverse().Distinct().Reverse().ToList(); Console.WriteLine(string.Join(",", result)); // 输出:access,postpone,success
原理:第一次反转列表后,Distinct()会保留每个元素第一次出现的实例(对应原列表中最后一次出现的实例),第二次反转即可得到按原列表最后一次出现顺序升序排列的去重结果。
- 方式2:GroupBy显式处理
该方案逻辑清晰可读性高,后续如果要扩展需求(比如统计出现次数、适配复杂类型元素)修改成本更低:
List<string> filterList = new List<string>() { "postpone", "access", "success", "postpone", "success" }; var result = filterList // 绑定元素与对应的索引 .Select((item, index) => new { Item = item, Index = index }) // 按元素值分组 .GroupBy(x => x.Item) // 按每个元素最后一次出现的索引升序排序 .OrderBy(g => g.Last().Index) // 提取去重后的元素值 .Select(g => g.Key) .ToList(); Console.WriteLine(string.Join(",", result)); // 输出:access,postpone,success
内容的提问来源于stack exchange,提问作者yancy
相关产品推荐
相关产品推荐

