C# 数组最大值

标签 c# .net linq arrays multidimensional-array

  • 我在 C# 中有 2 个名为 Arr1Arr2 的数组。 它们的尺寸完全相同......

我需要获取 Arr1 中与 Arr2 中以给定索引开头的最大元素相对应的元素 ...

例如
获取所有 i,j
Arr2 [ 1 , 10 , 3 , i , j ] 最大值的索引 返回 Arr1 [ 1 , 10 , 3 , i , j ]

当然,我需要优雅的解决方案(而不是“为他们循环”的解决方案……)

请注意:
我不想遍历数组,因为它是 11 维的!!..代码会很丑陋且容易出错..我可能会用完变量名:)

编辑:
正常的解决方案是:

for(int i=0;i<10;i++)
    for(int j=0;j<10;j++)
       if(Arr2[1,10,3,maxi,maxj]<Arr2[1,10,3,i,j])
       {
         maxi=i
         maxj=j
       }
 return Arr1[1,10,3,maxi,maxj];

但我需要用更少、更漂亮的代码来完成。可能会使用查询或 linq。

最佳答案

假设您必须有一个 11 维数组(做一些 M 理论工作?)并且没有其他数据结构是可能的,并且假设您不想使用循环来查找数组中的最大值数组,这只剩下我能想到的一种可能性:

使用两个私有(private)字段创建一个新的 ManagedArray 类,一个用于值,一个用于最大值。
创建具有 11 个索引参数的索引器。 get 就像任何具有 11 个参数的东西一样简单:

        public int this[int index1, int index2, int index3, int index4, int index5, int index6, int index7, int index8, int index9, int index10, int index11]
        {
            get
            {
                return (int) values.GetValue( index1, index2, index3, index4, index5, index6, index7, index8, index9, index10, index11 );
            }

如果新值大于该组维度的现有最大值,该集合将调用 SetValue 然后用新值更新当前最大值。
创建一个接受一堆索引值的 Maximum 属性,让它返回这些索引值的最大值的当前值。 现在将 Arr1 和 Arr2 更改为 ManagedArray 类的实例。

我们所做的是在请求时间(当您想知道最大值时)用一个稍微更耗时的跟踪最大值的数组 setter 来交换一个循环,这样我们就可以在请求时在恒定时间内查找它们。

据我所知,这是您可以做到的唯一方法。

请注意,您可以使用 params 关键字使其更易于阅读,但是当您更新最大值时,setter 会稍微复杂一些。由你决定。

关于C# 数组最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932148/

相关文章:

c# - 监控windows访问的文件

c# - 无法复制文件“C:\…\packages\…WebApi.Core.4.0.20710.0…System.Web.Http.dll”

mysql - 如何使 OleDB 查询读取冒号 :

c# - 从 TcpClient 序列化对象流中转换不同的对象?

c# - 使用linq获取xml属性

c# - 如何在运行时修改我的 App.exe.config key ?

c# - 将所有绘制的对象保存到位图中

.net - Sync Framework 4的扩展能力如何?

c# - .NET 2.0 中的 SignumFramework?

c# - 如何从此方法返回 Dictionary<string,Dictionary<int,decimal>> ?