• 我现在有这样的一个类,这个类里有一个存放两个祖先节点的List,这个List用来存放父亲节点和母亲节点。然后还有一个用来存放夫妻节点的节点类型的变量。首先我实例化节点1,然后调用节点1创建夫妻节点的方法(这个...
  • 因为用到list,要去除重复数据,尝试了几种方法。记录于此。。。 测试数据: List li1 = new List { "8", "8", "9", "9" ,"0","9"}; List li2 = new List { "张三", "张三", "李四", "张三", "王五", ...

    因为用到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();
    展开全文
  • C#运用List动态添加元素 2019-03-20 20:11:28
    C#中的数组是不支持动态添加元素的,只能创建固定大小的数组。 解决方法:可以使用List List<string> result = new List<string>(); for (int i = 0; i < 5; i++ ) { result.Add(i.ToString()); ...
  • C#交换List中的元素 2020-03-23 14:38:38
    private static List<T> Swap<T>(List<T> list, int index1, int index2) { var temp = list[index1]; list[index1] = list[index2]; list[index2...
  • 例如跳过List前50条,然后取100条,可写为: iclist_temp、iclist都为List类型 iclist_temp = iclist.Skip(50).Take(100).ToList(); 取前100条,可以写为: iclist_temp = iclist.Take(100).To...
  • List声明和初始化如下: List的遍历如下: 查看和设置List元素数如下: List常用的方法如下:
  • C# List 添加元素的问题(为什么我的元素都变一样了)    刚刚接触C#,囫囵吞枣的确让我吃了不少亏。。。今天就是一个教训。。。  今天用一个List容器,怎么知道在一个while循环中用List.Add()函数添加...
  • C#中删除List里面的元素 2019-02-17 11:04:58
    前段时间碰到一个问题,就是在用foreach 遍历集合的时候,删除其中元素的时候会报错。具体错误: InvalidOperationException: Collection was modified; enumeration operation may not execute. 错误指示在...
  • 1、使用foreach遍历并删除元素 因为在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从需导致在foreach中删除元素会出现异常。 2、使用for遍历并删除元素 使用...
  • c# list 删除重复元素 2014-05-21 14:57:02
    输入的数组格式:   strinput=”001,002,003,001,001,003,...具体的程序如下: 程序后台进行处理,因用到list ,需添加引用以下命名空间   using System.Collections.Generic; 程序正式代码:   string strinp
  • List&lt;string&gt; li1 = new List&lt;string&gt; { "8", "8", "9", "9", "0", "9" };  List&lt;string&gt; li2 = new ...
  • 1.元素为数值型 List<int> temp=new List<int>() {0,1,5,35,46,21,84,24,34}; temp.Sort((x,y)=>x.CompareTo(y)); foreach (var value in temp) { ...
  • C#循环删除List中某个元素 2017-07-27 17:19:53
    根据项目中的需要删除list集合中某些键值对,这就需要做循环处理,但是尝试中出现在问题,使用for 还foreach,在使用foreach运行时报错,提示集合已修改,可能无法执行枚举操作。因为在foreach中删除元素时,每一次...
  • 1、我们选择用for循环 2、
  • 此时就需要使用到List集合的Add方法,Add方法的作用为将对应的元素添加到List集合末尾,Add方法签名为void Add(T item),T代表List集合中的具体元素的类型,是C#中的泛型语法,item代表具体需要添加的元素对象。...
  • C#基础 List Add 添加元素 2019-05-07 20:34:40
     .NET Framework : 4.7.2        IDE : Visual Studio Community 2019         OS : Windows 10 x64     typesetting : Markdown         blog : blog.csdn.net/...
  • C# List 删除其中一段元素 2017-03-19 01:32:06
    C# List 删除其中一段元素梗概在通信或者某些数据处理中,需要把一个数据段中某一段连续的数据删除,可参考本方法。关键词C#, List, 删除一段元素, 通信, 数据处理目录C List 删除其中一段元素 梗概 关键词 目录 ...
  • List中有两个一样的元素,想把两个都去除,用remove和removeall都不行,list中是对象,distinct好像也不太好使,还请各位帮忙解答一下。 代码片段如下: classEdge { publicPointFstart; publicPointFend; } private...
  • C# LIST 的各种 2019-06-29 21:37:25
    发现自己的基础还是很薄弱, ...一个List<> 的相减花了一整天的时间,到最后还是选择了折中的方法。 有时间收集下List<> 资料 转载于:https://www.cnblogs.com/smallerpig/p/3646107.html...
1 2 3 4 5 ... 20
收藏数 52,087
精华内容 20,834