【发布时间】:2010-11-09 01:47:53
【问题描述】:
我有一个像 {1, 3, 5, 6, 8, 9} 这样的有序序列,如果序列不包含任何缺失元素,我想获取第一个缺失元素(示例中为 2)或 max()。 现在我这样做了:
public static int GetRegisterNumber<T>(this IQueryable<T> enumerable, Func<T, bool> whereFunc, Func<T, int?> selectFunc)
{
var regNums = enumerable.OrderBy(selectFunc).Where(whereFunc).ToArray();
if (regNums.Count() == 0)
{
return 1;
}
for (int i = 0; i < regNums.Count(); i++)
{
if (i + 1 != regNums[i])
{
return regNums[i].Value + 1;
}
}
return regNums.Last().Value + 1;
}
但我认为有更快的方法。有什么建议吗?
【问题讨论】:
-
Count()非常非常糟糕...将发布... -
它只有整数吗?他们总是积极的吗?有重复吗?
-
总是正整数,没有重复
-
帖子的标题和第一句话说明你有一个有序的序列。但是,您的方法所做的第一件事是 OrderBy。如果您将其计算为算法运行时间的一部分,那么您应该编辑帖子以说明您有一个需要排序和过滤的序列,然后搜索第一个缺失的元素。
标签: c# linq linq-to-sql search