0

我有两个列表,imported并且existing. 它们可以是相同的长度,也可以是不同的长度。

我想检查是否有任何东西imported不在existing.

如果它们的长度相同,我可以比较它们并找到与以下内容不匹配的地方:

if(Enumerable.SequenceEqual(imported.OrderBy(i => i), existing.OrderBy(ex => ex)) == false)

如果列表长度相同,则上述内容按预期工作。如果不是,则它不包含另一个不包含的项目,这是有道理的。

对于不同长度的列表,我该如何做到这一点?

场景 A,应该通过,没有什么 in importedthat's not in existing

现存的:"One", "Two", "Three"

进口:"One","Two"

场景 B,应该失败,“二”在imported但它不在existing

现存的:"One", "Two", "Three"

进口:"One","Tow"

我用过Intersect,但它们适用于场景 AExceptAny不是 B,反之亦然。

4

5 回答 5

5
imported.Except(existing).Any();
于 2013-07-25T09:38:30.790 回答
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 的回答更直接地向您提问

于 2013-07-25T09:38:05.893 回答
2

这可能会有所帮助:

imported.Any(i=>!existing.Contains(i));
于 2013-07-25T09:35:41.733 回答
1
if (imported.Any(item => !existing.Contains(item)))
    ...
于 2013-07-25T09:36:21.690 回答
0

如何通过填充 null 或 string.Empty 缺失的位置使两个列表的长度相同?

于 2013-07-25T09:35:15.633 回答