Most efficient way to compare two lists and delete the same

前端 未结 5 1394
执笔经年
执笔经年 2021-01-19 16:57

I want to compare two lists and get the valid words into a new list.

var words = new List();
var badWords = new List();

//this i         


        
相关标签:
5条回答
  • 2021-01-19 17:01

    you can use contains method

    words.Where(g=>!badWords.Contains(g)).ToList()
    
    0 讨论(0)
  • 2021-01-19 17:02

    If your don't want to create a new List you can remove the bad words from your existing List with RemoveAll()

    words.RemoveAll(badWords.Contains);
    
    0 讨论(0)
  • 2021-01-19 17:13

    Use EnumerableExcept function storing in System.Linq namespace

    finalList = words.Except(badWords).ToList();
    

    Most efficient way to save your time and also the fastest way to do it, because Except implementation uses Set, which is fast

    0 讨论(0)
  • 2021-01-19 17:21

    Use Enumerable.Except:

    List<string> cleanList = words.Except(badWords).ToList();
    

    This is efficient because Except uses a set based approach.

    An even more efficient approach is to avoid that "bad" words are added to the first list at all. For example by using a HashSet<string> with a case-insensitive comparer:

    var badWords = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase){ "Idiot", "Retarded", "Twat", "Fool", "Moron" };
    
    string word = "idiot";
    if (!badWords.Contains(word))
        words.Add(word);
    
    0 讨论(0)
  • 2021-01-19 17:21

    https://msdn.microsoft.com/library/bb908822(v=vs.90).aspx

    var words = new List<string>();
    var badWords = new List<string>();
    
    //this is just an example list. actual list does contain 700 records
    words.Add("Apple");
    words.Add("Moron");
    words.Add("Seafood");
    words.Add("Cars");
    words.Add("Chicken");
    words.Add("Twat");
    words.Add("Watch");
    words.Add("Android");
    words.Add("c-sharp");
    words.Add("Fool");
    
    badWords.Add("Idiot");
    badWords.Add("Retarded");
    badWords.Add("Twat");
    badWords.Add("Fool");
    badWords.Add("Moron");
    
    var result = words.Except(badWords).ToList();
    

    Edit: Got in late.

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