Tengo una secuencia ordenada como {1, 3, 5, 6, 8, 9} Quiero obtener el primer elemento que falta (2 en el ejemplo) o max() si la secuencia no contiene elementos faltantes. Ahora lo estoy haciendo de esta manera:¿Manera eficiente de obtener el primer elemento que falta en la secuencia ordenada?
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;
}
pero creo que hay métodos mucho más rápidos. ¿Alguna sugerencia?
'Count()' es muy, muy malo ... se publicará ... –
¿Tiene solo números enteros? ¿Son siempre positivos? ¿Hay duplicados? –
enteros siempre positivos, sin duplicados – xumix