C# 去掉List重复元素的方法
来源:互联网 发布:pnp网络摄像机手机端 编辑:程序博客网 时间:2024/05/22 03:43
因为用到list,要去除重复数据,尝试了几种方法。记录于此。。。
测试数据:
List<string> li1 = new List<string> { "8", "8", "9", "9" ,"0","9"}; List<string> li2 = new List<string> { "张三", "张三", "李四", "张三", "王五", "李四" }; List<string> li3 = new List<string> { "A", "A", "C", "A", "C", "D" }; List<string> li4 = new List<string> { "12", "18", "19", "19", "10", "19" };
方法一:
HashSet<string> hs = new HashSet<string>(li1); //此时已经去掉重复的数据保存在hashset中
方法二:
for (int i = 0; i < li2.Count; i++) //外循环是循环的次数 { for (int j = li2.Count - 1 ; j > i; j--) //内循环是 外循环一次比较的次数 { if (li2[i] == li2[j]) { li2.RemoveAt(j); } } }
方法三:
//把相同的用null代替。 for (int i = 0; i < li3.Count; i++) { for (int j = 0; j < li3.Count; j++) { if (i == j) continue; if (li3[i] == li3[j]) { li3[j] = "null"; } } }
方法四:
//这方法跟上面的一样,只是变了逻辑 for (int i = 0; i < li4.Count - 1; i++) { for (int j = 0; j < li4.Count ; j++) { if (i != j) { if (li4[i] == li4[j]) { li4[j] = "null"; } } } }
最后输出看结果
Console.WriteLine("li1去除重复后的值为"); hs.ToList().ForEach(item => Console.WriteLine(item)); Console.WriteLine("li2去除重复后的值为"); li2.ForEach(item => Console.WriteLine(item)); Console.WriteLine("li3去除重复后的值为"); li3.ForEach(item => Console.WriteLine(item)); Console.WriteLine("li4去除重复后的值为"); li4.ForEach(item => Console.WriteLine(item));
null我没去掉。用的时候去掉即可。
当然。还有许多办法。比如linq Distinct 等等都可以,看看网上的这个例子:去掉modelList中title重复的内容,不区分大小写
class Program { static void Main(string[] args) { List<Model> modelList = new List<Model>() { new Model() { ID = 1, Title = "abcde" }, new Model() { ID = 2, Title = "ABCDE" }, new Model(){ ID = 3, Title = "AbcdE" }, new Model() { ID = 4, Title = "A" }, new Model() { ID = 5, Title = "a" } }; Console.Read(); } } public class Model { public int ID { get; set; } public string Title { get; set; } }
解决方案一:这里比较的前提是对象的哈希代码相等。否则不会比较,因为哈希代码不相等。两个对象显然不相等
//定义一个类继承IEqualityComparer接口 public class ModelComparer : IEqualityComparer<Model> { public bool Equals(Model x, Model y) { return x.Title.ToUpper() == y.Title.ToUpper(); } public int GetHashCode(Model obj) { return obj.Title.ToUpper().GetHashCode(); } }
调用:
modelList = modelList.Distinct(new ModelComparer()).ToList();
解决方案二:
var title = modelList.GroupBy(m => m.Title.ToLower().Trim()).Select(m => new { ID = m.FirstOrDefault().ID }); modelList = modelList.Where(m => title.Select(mo => mo.ID).Contains(m.ID)).ToList(); foreach (var item in modelList) { Console.WriteLine(item.ID + "\t" + item.Title); }
当然。如果你仅仅比较两个值是否相等。
List<string> li1 = new List<string> { "8", "8", "9", "8", "0", "9" }; li1 = li1.Distinct().ToList();
阅读全文
0 0
- C# 去掉List重复元素的方法
- C# 去掉List重复元素的方法
- c#一个list去掉其中重复元素
- 去掉List中重复元素
- 去掉数组中重复的元素方法
- Coldfusion:把一个List里的重复元素去掉的一种方法。
- python 去掉list中的重复元素
- java去掉list中的重复元素
- java中两个list去掉重复元素
- list对象根据字段去掉重复元素
- c# list 删除重复元素
- 使用javascript去掉数组中重复元素的方法
- 编写一个方法 去掉一个数组的重复元素
- javascript和java数组中去掉重复元素的方法
- 用一个方法去掉一个数组的重复元素
- js去掉重复的元素
- 去掉List集合重复值的四种方法
- list去掉重复的对象
- Eclipse常用快捷键总结
- Frog Jump
- Anaconda为Python3.X安装basemap
- ARCore学习指引四剑客:原生、Unity、Unreal和WebAR
- C++书
- C# 去掉List重复元素的方法
- GraphViz配置指南
- 利用反射控制弹窗dialog能否dismiss消失
- ThreeJS学习笔记(5)-绘制网格
- javascript/js 检测浏览器类型和版本,检查浏览器是否支持flash,检查flash版本一站搞定~
- [原创] Python 仅获取响应头, 不获取实体
- scrapy如何从外部路径引入中间件
- AssetBundle(1)AssetBundle的初步认识
- Android中视频文件的下载和播放