0

如何使用 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 做到这一点?

4

2 回答 2

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

于 2019-02-10T10:58:15.213 回答
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;
于 2019-02-10T11:42:24.513 回答