我有两个列表,imported
和existing
。它们可以具有相同的长度或不同的长度。
我想检查imported
中是否有existing
中没有的内容。
如果长度相同,我可以对它们进行比较,发现与以下内容不匹配:
if(Enumerable.SequenceEqual(imported.OrderBy(i => i), existing.OrderBy(ex => ex)) == false)
如果列表长度相同,则上述方法按预期工作。如果没有,它就不会包含另一个没有的项目,这是有道理的。
如何为不同长度的列表执行此操作?
情景A ,应该通过,imported
中没有existing
中没有任何内容:
现有:"One", "Two", "Three"
已导入:"One","Two"
情景B ,应该失败,“两个”在imported
,但它不在existing
中:
现有:"One", "Two", "Three"
已导入:"One","Tow"
我使用了Intersect
,Except
和Any
,但它们适用于方案A而非B,反之亦然。
答案 0 :(得分:5)
imported.Except(existing).Any();
答案 1 :(得分:3)
Enumerable.Except可能是您的工具
List<string> imported = new List<string>() {"One", "Two", "Three"};
List<string> existing = new List<string>() {"One", "Two", "Four"};
List<string>missing = imported.Except(existing,
StringComparer.CurrentCultureIgnoreCase).ToList();
if(missing.Count == 0)
Console.WriteLine("Nothing to import");
else
Console.WriteLine("There are " + missing.Count + " items to import");
当然,这个答案假定您与结果差异(如果有的话)有关。否则使用Any的asnwers更直接向您提问
答案 2 :(得分:2)
这可能会有所帮助:
imported.Any(i=>!existing.Contains(i));
答案 3 :(得分:1)
if (imported.Any(item => !existing.Contains(item)))
...
答案 4 :(得分:0)
如何通过填充null或string来使两个列表的长度相同。填充缺少的位置?