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

时间:2019-02-10 10:44:22

标签: c# list linq-query-syntax

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

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

在这种情况下,我想返回13。

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

在这种情况下,我想退回10

如何使用LINQ做到这一点?

2 个答案:

答案 0 :(得分:3)

我会用这个:

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 };

的情况

答案 1 :(得分:0)

如果输入列表总是排序的,则可以利用它并进行简单的线性搜索:

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;