通过给出一个字符串数组,我想测试数组中的每个元素是否包含在预定义的字符串数组中。
例如:
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#代码最有效的方法是什么?
答案 0 :(得分: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))
{
...
}
答案 1 :(得分:2)
不确定最有效但最容易阅读的标准代码是否
arrayToCheck.All(a => predefined.Contains(a))