我正在寻找一种使用linq.js来确定集合是否具有多个不同值的有效方法。我假设以下方法效率低下,因为它必须考虑整个集合。
if (Enumerable.From(collection).Distinct().Take(2).Count() > 1) {
//it's not unique, continue loop
}
我的问题类似于: Efficient Linq Enumerable's 'Count() == 1' test
是否有更高效的基于linq.js的技术?谢谢!
答案 0 :(得分:1)
如果你专门测试一个集合中是否有多个项目,那么写它的惯用方法(恕我直言)就是将Skip
与Any
结合使用。跳过第一个项目,如果集合中有其他项目,则它有多个项目。如果它是空的,Skip
将无效地执行任何操作,并且集合中仍然没有任何其他项目。
在您的情况下,您的情况将是:
if (Enumerable.From(collection).Distinct().Skip(1).Any()) {
//it's not unique, continue loop
}
答案 1 :(得分:0)
var test = collection[0];
if (Enumerable
.From(collection)
.Skip(1)
.Any(function (e) { return e != test; })
)
让我解释一下。至少2个不同的项目表示对于任何项目,至少一个项目不等于它。让我们选择第一个项目,你可以选择任何其他项目,首先是更方便,让我们看看是否有任何其他数字不等于它(除了它自己)。