测试项数组是否在预定义数组内的最佳方法是什么?
本文关键字:数组 最佳 方法 是什么 预定义 是否 测试 | 更新日期: 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),而不是All
…Contains
溶液,也就是O(N * M)当然,这并没有说明绝对性能。如果你使用小型集合,All
…Contains
实际上可能更快。当涉及的集合变大时,这可能会更快。
编辑:正如评论中所指出的,如果你可以从predefined
创建一个HashSet<T>
并重用它,它可以更有效…而且实际上可读性更强:
var predefinedSet = new HashSet<string>(predefined);
...
if (predefinedSet.IsSupersetOf(a))
{
...
}
不确定是否最有效但最容易阅读和标准的代码将是
arrayToCheck.All(a => predefined.Contains(a))