获取整数列表中的最小可用数

Get minimum available number in list of integers

如何使用 LINQ 获取整数列表中的最小可用数?数字不能小于10.

List<int> numbers = new List<int>() { 10, 11, 12, 22, 23 };

我想 return 13 在这种情况下。

List<int> numbers1 = new List<int>() { 11, 12, 22, 23 };

我想 return 10 在这种情况下

如何使用 LINQ 实现?

我会用这个:

List<int> numbers = new List<int>() { 11, 12, 22, 23 };

int result = Enumerable.Range(10, numbers.Count + 1).First(x => !numbers.Contains(x));

numbers.Count + 1 的使用处理了 List<int> numbers = new List<int>() { 10, 11, 12, 13, 14, 15 };

的情况

如果输入列表总是排序的,你可以利用这一点做一个简单的线性搜索:

List<int> numbers = new List<int>() { 11, 12, 13, 14 };
int result = numbers
    .Zip(
        numbers.Skip(1).Concat(new[] { int.MaxValue }),
        (a, b) => (next: a+1, b))
    .FirstOrDefault(x => x.next != x.b)
    .next;

这比@Enigmativity 的解决方案更难看,但它的优点是线性而不是二次,如果数字列表很大,这会产生影响。

就个人而言,我只是将其编写为廉价的线性 for 循环:

for (int i = 0; i < numbers.Count - 1; i++)
{
    int next = numbers[i] + 1;
    if (next != numbers[i + 1])
    {
        return next;
    }
}
return numbers[numbers.Count - 1] + 1;