4

我正在寻找一种使用 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 的技术?谢谢!

4

2 回答 2

1

如果您正在专门测试一个集合中是否包含多个项目,那么编写它的惯用方式(恕我直言)是SkipAny. 跳过第一个项目,如果集合中有任何其他项目,则它有多个。如果它是空的,则Skip实际上什么都不做,并且集合中仍然不会有任何其他项目。

在您的情况下,您的情况将是:

if (Enumerable.From(collection).Distinct().Skip(1).Any()) {
    //it's not unique, continue loop
}
于 2013-03-24T20:03:40.380 回答
0
var test = collection[0];
if (Enumerable
    .From(collection)
    .Skip(1)
    .Any(function (e) { return e != test; })
   )

让我解释一下。至少 2 个不同的项目意味着对于任何项目,至少有一个项目不等于它。先挑第一个,其他的都可以,只是第一个比较方便,看看有没有其他不等于它的数(除了它自己)。

于 2013-03-19T22:35:40.517 回答