查找数组中的下一个最大值

本文关键字:下一个 最大值 数组 查找 | 更新日期: 2023-09-27 18:13:55

我有一个5个字符的数组和一个字符'4',我想找到数组中下一个最大的值,这将是一个'6'。我该怎么做呢?

谢谢大家

char findNextBiggestValue = '4';
char array[5] {'3','6','7','8','9'};

查找数组中的下一个最大值

试试这个,先排序,然后筛选:

char findNextBiggestValue = '4';
char array[5] {'3','6','7','8','9'};
var val = array.OrderBy(s => s).FirstOrDefault(x => x > findNextBiggestValue);

var val = array.Where(x => x > findNextBiggestValue).Min();

我会这样做:

char findNextBiggestValue = '4';
char[] array = new [] { '3','6','7','8','9'};
char min = array.Where(c => c > findNextBiggestValue).Min();

这比排序执行得快,因为它只对数组进行一次迭代。LINQ的操作符链与.Where(...).Min()操作非常有效。

如果.Where(...)操作符没有返回元素,此代码还返回一个异常。这是按照设计的,因为char是一种必须具有操作符的值类型,并且返回任何值作为默认值将是一个错误。

另一种选择是返回char?,而让null值表示没有返回结果。

在这种情况下,代码看起来像这样:

char? min = array.Where(c => c > findNextBiggestValue).Cast<char?>().Min();

如果您不想对数组进行排序,让我们试试这种方式。

    char findNextBiggestValue = '4';
    char[] array = {'3', '6', '7', '8', '9'};
    // No elemnt? Do nothing
    if (array.Length < 1)
    {
        return;
    }
    // Init it a large value
    char minValue = 'z';
    // Look for the next bigger value
    foreach (var c in array)
    {
        if (findNextBiggestValue < c && c < minValue)
        {
            minValue = c;
        }
    }
    Console.WriteLine(minValue);

数组。FirstOrDefault(x => x> '4')

您可以使用FirstOrDefault扩展方法来实现这一点:

 array.FirstOrDefault(m=> int.Parse(m.ToString()) > int.Parse(findNextBiggestValue.ToString());