1

通过给出一个字符串数组,我想测试数组中的每个元素是否包含在预定义的字符串数组中。

例如:

var a = new[] { "test1", "test2" };

var b = new[] { "test1", "test4" };

var c = new[] { "test1", "test3", "test1", "test3" };

var predefined = new[] { "test1", "test2", "test3" };

变量 a 和 c 将返回 true,b 将返回 false。

C# 代码最有效的方式是什么?

4

2 回答 2

7

订购对您来说重要吗?如果没有,我会使用 LINQ:

if (!a.Except(predefined).Any())
{
    // predefined contains every element of a
    // (Way to read this: there is no element of a which isn't also in predefined)
}

这通常是 O(N + M) 而不是All...Contains解决方案是 O(N * M)。当然,这并没有说明绝对性能。如果您使用的是小型集合,则All...Contains实际上可能更快。随着所涉及的集合越来越大,这更有可能更快。

编辑:如评论中所述,如果您可以创建一个HashSet<T>并重predefined用它,它可以更有效......实际上也更具可读性:

var predefinedSet = new HashSet<string>(predefined);
...

if (predefinedSet.IsSupersetOf(a))
{
    ...
}
于 2013-03-15T17:21:26.733 回答
2

不确定最有效但最容易阅读和标准的代码是否是

arrayToCheck.All(a => predefined.Contains(a))
于 2013-03-15T17:21:20.800 回答