Remove elements from one List that are found in another

后端 未结 8 978
情话喂你
情话喂你 2020-12-10 11:31

I have two lists

 List list1 = new List();
 List list2 = new List();

I want remove all elements from li

相关标签:
8条回答
  • 2020-12-10 11:39
    list1.RemoveAll( item => list2.Contains(item));
    
    0 讨论(0)
  • 2020-12-10 11:40

    Using LINQ you can do this:

     List1.RemoveAll(i => !List2.Contains(i));
    
    0 讨论(0)
  • 2020-12-10 11:43

    With LINQ:

    var result = list1.Except(list2);
    
    0 讨论(0)
  • 2020-12-10 11:46

    To change the actual list1 in place, you could use

    list1.RemoveAll(item => list2.Contains(item));
    

    You might instead prefer to simply have a query over the lists without modifying either

    var result = list1.Except(list2);
    

    LukeH makes a good recommendation in the comments. In the first version, and if list2 is particularly large, it might be worth it to load the list into a HashSet<T> prior to the RemoveAll invocation. If the list is small, don't worry about it. If you are unsure, test both ways and then you will know.

    var theSet = new HashSet<YourType>(list2);
    list1.RemoveAll(item => theSet.Contains(item));
    
    0 讨论(0)
  • 2020-12-10 11:48
    var result = list1.Except(list2);
    
    0 讨论(0)
  • 2020-12-10 11:54

    If you want to remove a list of objects (list2) from another list (list1) use:

    list1 = list1.Except(list2).ToList()
    

    Remember to use ToList() to convert IEnumerable<T> to List<T>.

    0 讨论(0)
提交回复
热议问题