首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多维数组中寻找n个最大元素

在多维数组中寻找n个最大元素
EN

Stack Overflow用户
提问于 2022-11-05 10:32:22
回答 2查看 35关注 0票数 1

如果没有现有的方法(如list.Add),如何在多维数组中找到第5或第7或第15大元素--如果您用c#编写它,我会很高兴的。

代码语言:javascript
复制
int[,,,] x =new int[100, 20, 35, 200];

...

int indis  = 0;
int toplam = 0;
int enss   = 0;

for (int i = 0; i < 100; i++) {
  for (int j = 0; j < 20; j++) {
    toplam = 0;

    for (int k = 0; k < 35; k++) {
      for (int l = 0; l < 200; l++) {
        toplam += x[i, j, k, l];
      }
    }

    if (toplam > enss) {
      enss  = toplam; 
      indis = j;
    }
  }
}
EN

回答 2

Stack Overflow用户

发布于 2022-11-05 10:35:30

您可以尝试在Linq的帮助下进行查询(如果需要,让.NET使用Add )。关键是将多维数组T[,,,]视为IEnumerable<T>;我们可以为此使用OfType()。有了IEnumerable<T>,我们就能解决剩下的问题。要找到最大项,只需调用Max()

代码语言:javascript
复制
using System.Linq;

...

int[,,,] x = new int[100, 20, 35, 200];

...

int max = x.OfType<int>().Max();

如果您想要找到n第四大项,可以排序、跳过n - 1项并选择第一个:

代码语言:javascript
复制
...

int n = 7;

int maxN = x
  .OfType<int>()
  .OrderByDescending(item => item)
  .Skip(n - 1)
  .First();
票数 1
EN

Stack Overflow用户

发布于 2022-11-05 10:50:10

使用linq:

代码语言:javascript
复制
           var table = Enumerable.Range(0, x.GetLength(0))
                .SelectMany((a, i) => Enumerable.Range(0, x.GetLength(1))
                .SelectMany((b, j) => Enumerable.Range(0, x.GetLength(2))
                .SelectMany((c, k) => Enumerable.Range(0, x.GetLength(3)
                .Select((d, l) => new { x = x[i, j, k, l], i = i, j = j, k = k, l = l }))))
                .OrderByDescending(x => x.x);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74326969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档