查找数组中的下一个最大值
本文关键字:下一个 最大值 数组 查找 | 更新日期: 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());