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

时间:2016-02-08 09:15:21

标签: c# list compare .net-4.5

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

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

我正在寻找比较列表的最有效方法,并将所有“好”字词放入新列表中。 finalList不应包含“Moron”,“Twat”和“Fool”。

var finalList = new List<string>();

或者是否没有必要创建新的List?我很高兴听到你的想法!

提前谢谢

5 个答案:

答案 0 :(得分:8)

使用存储在Enumerable命名空间

中的System.Linq Except函数
finalList = words.Except(badWords).ToList();

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

答案 1 :(得分:7)

使用Enumerable.Except

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

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

更有效的方法是避免“坏”&#34;单词会被添加到第一个列表中。例如,使用HashSet<string>和不区分大小写的比较器:

var badWords = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase){ "Idiot", "Retarded", "Twat", "Fool", "Moron" };

string word = "idiot";
if (!badWords.Contains(word))
    words.Add(word);

答案 2 :(得分:2)

你可以使用包含方法

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

答案 3 :(得分:1)

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

编辑:迟到了。

答案 4 :(得分:0)

如果您不想创建新的List,则可以使用RemoveAll()

从现有的List中删除不良字词
words.RemoveAll(badWords.Contains);