簡體   English   中英

C#在2D數組中查找3個最大值

[英]C# Finding 3 largest values in a 2D Array

目前,我已經為2D數組分配了隨機值。 我知道如何找到像這樣的最大值:

public static int Largest( int[,] C)
{
    int largest = 0;
    for (int row = 0; row < C.GetLength(0); row++)
    {
        for (int col = 0; col < C.GetLength(1); col++)
        {
            if( largest < C[ row, col])
            {
                largest = C[ row, col];
            }
        }
    }
    return largest;
}

但是我想找到三個最大值並返回總和。 我對它的查找方式不一定有任何限制,但是它將成為與我編寫的最大方法類似的另一種方法嗎?

在C#中,您可以使用linq輕松完成此操作:

var sum = C.Cast<int>().OrderByDescending(i => i).Take(3).Sum();

就是如此,它將數組轉換為一維可枚舉的數組,將其從最大到最小排序,采用前三個元素並將其求和。

與基於LINQ的解決方案相比,另一種可能更快,絕對不夠靈活的解決方案:

public static int LargestSum(int[,] array)
{
    int firstLargest = 0, secondLargest = 0, thirdLargest = 0;
    for(int x = 0; x < array.GetLength(0); x++)
    {
        for(int y = 0; y < array.GetLength(1); y++)
        {
            int value = array[x, y];
            if(value > thirdLargest)
            {
                if (value > secondLargest)
                {
                    if (value > firstLargest)
                    {
                        thirdLargest = secondLargest;
                        secondLargest = firstLargest;
                        firstLargest = value;
                    }
                    else
                    {
                        thirdLargest = secondLargest;
                        secondLargest = value;
                    }
                }
                else
                {
                    thirdLargest = value;
                }
            }
        }
    }
    return firstLargest + secondLargest + thirdLargest;
}

暫無
暫無

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

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