List集合里面去除重复的数据

原创 2016年06月01日 21:28:49

因为用到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();

 

vnc与windows之间的复制粘贴

【原创】VNC怎么和宿主机共享粘贴板 假设目标主机是linux,终端主机是windows(就是在windows上使用VNC登陆linux) 在linux中执行 vncconfig -nowin& 在...

微信公众平台java开发详解(工程代码+解析)

说明: 本次的教程主要是对微信公众平台开发者模式的讲解,网络上很多类似文章,但很多都让初学微信开发的人一头雾水,所以总结自己的微信开发经验,将微信开发的整个过程系统的列出,并对主要代码进行讲解分析,...

Linq实现DaTaTable或者List里面数据值不重复

在回答论坛有个某列不重复的值为条件获取数据的问题,二

去除list集合中重复项的几种方法

去除list集合中重复项的几种方法 因为用到list,要去除重复数据,尝试了几种方法。记录于此。。。 测试数据:        Liststring> li1 = new List...

去除List集合中的重复值的方法

最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。 但是赋给set集合后,由...

List集合去除重复对象

一般初级程序员老是会遇到2个问题,一个是排序,一个是去除重复,去除重复最头疼的一般的数组什么的比较简单,但是对象的话很多初级程序员就束手无策了。这里我们以实例来讲解去除重复对象的灵活使用方法。...

完美解决Java中List集合去除重复的JavaBean对象某些属性值方案

最近在写安卓的一个筛选功能,由于后台没有给接口,所以要把服务器返回搜索结果的数据进行分组。但是又有重复的属性,要把它们全部剔除。部分JSON数据如下:"items": [ { "c...
  • codekxx
  • codekxx
  • 2016年12月08日 12:05
  • 230

java找出2个集合相同和不同的元素(以及去除List中的重复元素)

java找出2个集合相同和不同的元素(以及去除List中的重复元素)
  • high2011
  • high2011
  • 2016年01月10日 18:00
  • 16943

java 中 各种集合(List Set Map) 去除重复项

//各种集合(List  Set  Map) 去除重复项import java.text.CollationKey;import java.text.Collator;import java.util...

去除list集合中重复项的几种方法

去除list集合中重复项的几种方法 因为用到list,要去除重复数据,尝试了几种方法。记录于此。。。 测试数据:        Liststring> li1 = new List...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:List集合里面去除重复的数据
举报原因:
原因补充:

(最多只允许输入30个字)