测试项数组是否在预定义数组内的最佳方法是什么?

本文关键字:数组 最佳 方法 是什么 预定义 是否 测试 | 更新日期: 2023-09-27 18:04:11

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

例如:

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#代码最有效的方式是什么?

测试项数组是否在预定义数组内的最佳方法是什么?

订购对你来说重要吗?如果没有,我就使用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),而不是AllContains溶液,也就是O(N * M)当然,这并没有说明绝对性能。如果你使用小型集合,AllContains实际上可能更快。当涉及的集合变大时,这可能会更快。

编辑:正如评论中所指出的,如果你可以从predefined创建一个HashSet<T>并重用它,它可以更有效…而且实际上可读性更强:

var predefinedSet = new HashSet<string>(predefined);
...
if (predefinedSet.IsSupersetOf(a))
{
    ...
}

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

arrayToCheck.All(a => predefined.Contains(a))