根据内容而不是长度,比较两个不同长度的字符串列表

时间:2013-07-25 09:32:32

标签: c# string linq

我有两个列表,importedexisting。它们可以具有相同的长度或不同的长度。

我想检查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"

我使用了IntersectExceptAny,但它们适用于方案A而非B,反之亦然。

5 个答案:

答案 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来使两个列表的长度相同。填充缺少的位置?