如何比较2个List <string>对象以从List <string>中获取缺失值

时间:2015-11-17 18:03:47

标签: c# c#-4.0

我如何使用&#34; NOT IN&#34;获取缺失的数据,添加到&#34; foo&#34;列表。

var accessories = new List<string>(); 
var foo = new List<string>();

accessories.Add("Engine");
accessories.Add("Tranny");
accessories.Add("Drivetrain");
accessories.Add("Power Window");

foo.Add("Engine");
foo.Add("Tranny");
foo.Add("Power Window");

foreach(var v in foo.Where(x => x??).???)
{
    foo.Add(v);  //Add the missing "Drivetrain" to it...
}

5 个答案:

答案 0 :(得分:3)

您可以use .Except()来区分两组:

var difference = accessories.Except(foo);
// difference is now a collection containing elements in accessories that are not in foo

如果您想将这些项目添加到foo

foo = foo.Concat(difference).ToList();

答案 1 :(得分:2)

使用List.Except

foo.AddRange(accessories.Except(foo));

来自MSDN:

  

除了产生两个序列的设定差异外。

答案 2 :(得分:1)

有一个LINQ方法为你做这个,它看起来像这样; uint32_t

答案 3 :(得分:1)

您可以合并<key>UIAppFonts</key> <array> <string>SomeFont.otf</string> <string>SomeOtherFont.otf</string> </array> Concat来执行此操作:

Distinct

enter image description here

编辑:或foo = foo.Concat(accessories).Distinct().ToList(); 正如其他人所指出的那样,这似乎是这种情况的最佳选择。

答案 4 :(得分:0)

如果你只是想让foo成为foo和附件中所有元素的独特组合(即两个列表的结合),

List<string> foo = foo.Union(accessories).ToList();