You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中不使用List.Add等方法查找多维数组的第N大元素

不使用集合方法查找多维数组中第N大元素的C#实现

要实现这个需求,核心思路是手动遍历多维数组收集目标值到一维数组,再通过排序找到第N大元素,全程不依赖List.Add这类集合方法。以下分两种场景实现:

场景1:查找代码中toplam值的第N大元素

你的代码片段是计算每个(i,j)对应的三维子数组求和值toplam,我们可以先把所有toplam收集到一维数组,再排序取第N大:

int[,,,] x = new int[100, 20, 35, 200];
// 假设这里已经给数组x完成赋值

// 1. 计算toplam的总数:100*i *20*j = 2000个
int toplamCount = x.GetLength(0) * x.GetLength(1);
int[] toplamArray = new int[toplamCount];
int index = 0;

// 2. 遍历收集所有toplam值
for (int i = 0; i < x.GetLength(0); i++)
{
    for (int j = 0; j < x.GetLength(1); j++)
    {
        int toplam = 0;
        for (int k = 0; k < x.GetLength(2); k++)
        {
            for (int l = 0; l < x.GetLength(3); l++)
            {
                toplam += x[i, j, k, l];
            }
        }
        toplamArray[index++] = toplam;
    }
}

// 3. 对数组进行升序排序
Array.Sort(toplamArray);

// 4. 获取第N大元素(以第5大为例)
int n = 5;
// 升序数组中,第N大的元素位于「数组长度 - N」的索引位置
int fifthLargest = toplamArray[toplamCount - n];
Console.WriteLine($"第5大的toplam值:{fifthLargest}");

// 同理获取第7大、第15大元素
int seventhLargest = toplamArray[toplamCount - 7];
int fifteenthLargest = toplamArray[toplamCount - 15];

场景2:查找多维数组本身元素的第N大元素

如果要直接找四维数组x中所有元素的第N大,步骤类似:

int[,,,] x = new int[100, 20, 35, 200];
// 假设这里已经给数组x完成赋值

// 1. 计算数组总元素数
long totalElements = (long)x.GetLength(0) * x.GetLength(1) * x.GetLength(2) * x.GetLength(3);
int[] allElements = new int[totalElements];
long elemIndex = 0;

// 2. 遍历多维数组,将元素填充到一维数组
for (int i = 0; i < x.GetLength(0); i++)
{
    for (int j = 0; j < x.GetLength(1); j++)
    {
        for (int k = 0; k < x.GetLength(2); k++)
        {
            for (int l = 0; l < x.GetLength(3); l++)
            {
                allElements[elemIndex++] = x[i, j, k, l];
            }
        }
    }
}

// 3. 对数组进行升序排序
Array.Sort(allElements);

// 4. 获取第N大元素(以第5大为例)
int n = 5;
int fifthLargestElement = allElements[allElements.Length - n];
Console.WriteLine($"第5大的元素:{fifthLargestElement}");

可选:手动实现排序(不依赖Array.Sort)

如果不想使用框架自带的排序方法,可以手动实现冒泡排序(降序),直接取对应索引的元素:

// 手动实现降序冒泡排序
for (int i = 0; i < toplamArray.Length; i++)
{
    for (int j = 0; j < toplamArray.Length - i - 1; j++)
    {
        if (toplamArray[j] < toplamArray[j + 1])
        {
            // 交换元素位置
            int temp = toplamArray[j];
            toplamArray[j] = toplamArray[j + 1];
            toplamArray[j + 1] = temp;
        }
    }
}
// 降序排序后,第N大元素直接取索引n-1
int fifthLargest = toplamArray[4]; // 第5大对应索引4

内容的提问来源于stack exchange,提问作者Metin Selman Irmak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:15:15