因为用到list,要去除重复数据,尝试了几种方法。记录于此。。。

测试数据:

  1.        List<string> li1 = new List<string> { "8", "8", "9", "9" ,"0","9"};
  2. List<string> li2 = new List<string> { "张三", "张三", "李四", "张三", "王五", "李四" };
  3. List<string> li3 = new List<string> { "A", "A", "C", "A", "C", "D" };
  4. List<string> li4 = new List<string> { "12", "18", "19", "19", "10", "19" };

方法一:

  1. HashSet<string> hs = new HashSet<string>(li1); //此时已经去掉重复的数据保存在hashset中

方法二:

  1. for (int i = 0; i < li2.Count; i++) //外循环是循环的次数
  2. {
  3. for (int j = li2.Count - 1 ; j > i; j--) //内循环是 外循环一次比较的次数
  4. {
  5.  
  6. if (li2[i] == li2[j])
  7. {
  8. li2.RemoveAt(j);
  9. }
  10.  
  11. }
  12. }

方法三:

  1.       //把相同的用null代替。
  2. for (int i = 0; i < li3.Count; i++)
  3. {
  4. for (int j = 0; j < li3.Count; j++)
  5. {
  6. if (i == j) continue;
  7.  
  8. if (li3[i] == li3[j])
  9. {
  10. li3[j] = "null";
  11. }
  12.  
  13. }
  14. }

方法四:

  1.      //这方法跟上面的一样,只是变了逻辑
  2. for (int i = 0; i < li4.Count - 1; i++)
  3. {
  4. for (int j = 0; j < li4.Count ; j++)
  5. {
  6. if (i != j)
  7. {
  8. if (li4[i] == li4[j])
  9. {
  10. li4[j] = "null";
  11. }
  12. }
  13. }
  14. }

最后输出看结果

  1.        Console.WriteLine("li1去除重复后的值为");
  2. hs.ToList().ForEach(item => Console.WriteLine(item));
  3.  
  4. Console.WriteLine("li2去除重复后的值为");
  5. li2.ForEach(item => Console.WriteLine(item));
  6.  
  7. Console.WriteLine("li3去除重复后的值为");
  8. li3.ForEach(item => Console.WriteLine(item));
  9.  
  10. Console.WriteLine("li4去除重复后的值为");
  11. li4.ForEach(item => Console.WriteLine(item));

null我没去掉。用的时候去掉即可。

当然。还有许多办法。比如linq  Distinct  等等都可以,看看网上的这个例子:去掉modelList中title重复的内容,不区分大小写

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. List<Model> modelList = new List<Model>()
  6. { new Model() { ID = 1, Title = "abcde" },
  7. new Model() { ID = 2, Title = "ABCDE" },
  8. new Model(){ ID = 3, Title = "AbcdE" },
  9. new Model() { ID = 4, Title = "A" },
  10. new Model() { ID = 5, Title = "a" }
  11. };
  12. Console.Read();
  13. }
  14. }
  15. public class Model
  16. {
  17. public int ID { get; set; }
  18. public string Title { get; set; }
  19. }

解决方案一:这里比较的前提是对象的哈希代码相等。否则不会比较,因为哈希代码不相等。两个对象显然不相等

  1. //定义一个类继承IEqualityComparer接口
  2. public class ModelComparer : IEqualityComparer<Model>
  3. {
  4. public bool Equals(Model x, Model y)
  5. {
  6. return x.Title.ToUpper() == y.Title.ToUpper();
  7. }
  8. public int GetHashCode(Model obj)
  9. {
  10. return obj.Title.ToUpper().GetHashCode();
  11. }
  12. }

调用:

  1. modelList = modelList.Distinct(new ModelComparer()).ToList();

解决方案二:

  1. var title = modelList.GroupBy(m => m.Title.ToLower().Trim()).Select(m => new { ID = m.FirstOrDefault().ID });
  2. modelList = modelList.Where(m => title.Select(mo => mo.ID).Contains(m.ID)).ToList();
  3. foreach (var item in modelList)
  4. {
  5. Console.WriteLine(item.ID + "\t" + item.Title);
  6. }

当然。如果你仅仅比较两个值是否相等。

  1. List<string> li1 = new List<string> { "8", "8", "9", "8", "0", "9" };
  2. li1 = li1.Distinct().ToList();

C# 去掉List重复元素的方法的更多相关文章

  1. python去除列表中重复元素的方法

    列表中元素位置的索引用的是L.index 本文实例讲述了Python去除列表中重复元素的方法.分享给大家供大家参考.具体如下: 比较容易记忆的是用内置的set 1 2 3 l1 = ['b','c', ...

  2. JS判断数组中是否有重复元素的方法

    判断数组中是否有重复元素,最容易想到的方法是使用2重循环,逐个遍历,比较,但是这个是最慢,最笨的方法,百度得出了更好的方法. var ary = new Array("111",& ...

  3. js判断数组里是否有重复元素的方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/longzhoufeng/article/details/78840974 第一种方法:但是下面的这种 ...

  4. java去除数组重复元素的方法

    转载自:https://blog.csdn.net/Solar24/article/details/78672500 import java.util.ArrayList; import java.u ...

  5. ArrayList中重复元素处理方法.[Java]

    1.使用HashSet删除ArrayList中重复的元素 private static void sortByHashSet() { ArrayList<String> listWithD ...

  6. 【C++】去除vector里重复元素的方法比较

    背景:构造一个无重复的白名单,之后要在里面进行二分查找.故要求名单有序,且无重复,并且要进行二分查找,所以要采用有:随机访问迭代器类型的容器.这类容器有vector,array,deque.显然要ve ...

  7. js-一种去掉数组中重复元素的方法

    思路来源于某个同学的博客 function norepeat(arr){ return arr.filter(function(val,index,array) { return array.inde ...

  8. Python-删除列表中重复元素的方法

    1.set()方法 x = [1,2,3,4,5,1] y = list(set(x)) print(y) ``` [1, 2, 3, 4, 5] ``` 2. x = ['b','c','d','b ...

  9. JS 去除重复元素的方法

    Array.prototype.del = function () { var a = {}, c = [], l = this.length; ; i < l; i++) { var b = ...

随机推荐

  1. html(单纯html标签)

    html是超文本标记语言, 不是编程语言. 单标签:<br/>.<img>.hr(水平线).input, 双标签:h1~h6,p,a,div,head,body,title,s ...

  2. win10 系统怎么获取最高管理员权限删除文件

    http://www.xitongcity.com/jiaocheng/win8_content_3473.html 很多win8.1系统用户在对磁盘文件进行清理时,经常会遇到“文件夹访问被拒绝,您需 ...

  3. 10月wish me luck

    10/13 明天开始的三天 就要跟历史地理化学说拜拜了 以诚待之 好运 10/20 P三角形计数:一看就是叉积.因为去年迪子讲过.但是我已经忘记了.所以重新写了一遍.把所有的点有序化,将三角形面积转化 ...

  4. 开源协议:LGPL协议、OSGi协议---打酱油的日子

    本文介绍开源的协议. LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNU Library General Publi ...

  5. 写JQuery 插件 什么?你还不会写JQuery 插件

    http://www.cnblogs.com/Leo_wl/p/3409083.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui ...

  6. 【BZOJ1672】[Usaco2005 Dec]Cleaning Shifts 清理牛棚 动态规划

    [BZOJ1672][Usaco2005 Dec]Cleaning Shifts Description Farmer John's cows, pampered since birth, have ...

  7. 【Alpha】Daily Scrum Meeting第八次

    一.本次Daily Scrum Meeting主要内容 抓紧冲刺(接下去两天都在下午增加一个小会议) 剩余任务的概况 二.项目进展 学号尾数 今日已完成任务 接下去要做 502 无 将数据库的数据转换 ...

  8. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort

    链接 题意:输入n,m,表示一个n行m列的矩阵,每一行数字都是1-m,顺序可能是乱的,每一行可以交换任意2个数的位置,并且可以交换任意2列的所有数 问是否可以使每一行严格递增 思路:暴力枚举所有可能的 ...

  9. JS中的函数声明错误

      这个问题是JS的函数声明形参部分不带var. ( 额,基础不扎实.)

  10. 后台树状菜单,js实现递归无限分类

    //新闻类别管理 public function new_classify() { $arr = M('news_classify')->where("fid = 0")-& ...