簡體   English   中英

在數組C#中查找下一個最大值

[英]Finding the next biggest value in the array C#

我有一個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是必須具有運算符的值類型,並且將任何值作為默認值返回將是一個bug。

另一種選擇是返回一個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);

array.FirstOrDefault(x => x>'4')

您可以使用FirstOrDefault擴展方法來實現此目的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM