【问题标题】:Linq equivalent for collection contains at least x items; like .Any() but instead .AtLeast(int)集合的 Linq 等效项至少包含 x 个项目;像 .Any() 但不是 .AtLeast(int)
【发布时间】:2015-09-16 18:47:38
【问题描述】:

是否有 Linq 方法来检查集合是否至少包含 x 个项目? .Any() 很棒,因为只要找到一个项目,它就会是真的,程序不需要去获取集合中可能存在的任何其他内容。 是否有 ContainsAtLeast() 方法 - 或者如何实现它以表现得像 .Any()

我要求的是像.Any() 这样的行为,所以我可以避免使用.Count() 并执行.AtLeast(4),所以如果它找到4 个项目,它会返回true。

【问题讨论】:

标签: c# linq


【解决方案1】:

你可以拨打Skip求最小减1,然后查看是否还有剩余:

public static bool AtLeast(this IEnumerable<T> source, int minCount)
{
    return source.Skip(minCount - 1).Any();
}

请注意,对于大量计数,如果您的源实现 ICollection&lt;T&gt;,这可能比使用 Count 慢得多。所以你可能想要:

public static bool AtLeast(this IEnumerable<T> source, int minCount)
{
    var collection = source as ICollection<T>;
    return collection == null
        ? source.Skip(minCount - 1).Any() : collection.Count >= minCount;
}

(您可能还想检查非通用 ICollection。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多