比较两个列表并删除相同列表的最有效方法



我想比较两个列表并将有效单词放入新列表中。

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");

我正在寻找最有效的方法来比较列表并将所有"好"词放入新列表中。最终列表不应包含"白痴","Twat"和"傻瓜"。

var finalList = new List<string>();

还是没有必要创建新列表?我很高兴听到你的想法!

提前谢谢你

使用Enumerable Except 存储在System.Linq命名空间中的函数

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

节省时间的最有效方法,也是最快的方法,因为Except实现使用Set,这是快速

使用 Enumerable.Except

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

这是有效的,因为Except使用基于集的方法。

一种更有效的方法是避免将"坏"词添加到第一个列表中。例如,通过将HashSet<string>与不区分大小写的比较器一起使用:

var badWords = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase){ "Idiot", "Retarded", "Twat", "Fool", "Moron" };
string word = "idiot";
if (!badWords.Contains(word))
    words.Add(word);

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();

编辑:迟到了。

你可以使用包含方法

words.Where(g=>!badWords.Contains(g)).ToList()

如果您不想创建新List您可以使用RemoveAll()从现有List中删除坏词

words.RemoveAll(badWords.Contains);

相关内容

  • 没有找到相关文章

最新更新