C#数组最大值

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

我需要从给定索引开始,获取Arr1的元素,该元素对应于Arr2中的最大元素…

例如
获得所有ij的最大值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]; 

但我需要在更少和更漂亮的代码中做到这一点..可能正在使用querys或linq ..

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

创建一个包含两个私有字段的新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,然后使用新值更新当前最大值。
创建一个最大属性,它接受一堆索引值,让它返回那些索引值的最大值的当前值。 现在将Arr1和Arr2更改为ManagedArray类的实例。

我们所做的是在请求时交换一个循环(当你想知道最大值时),用一个稍微更费时的数组设置器来跟踪最大值,这样我们就可以在需要的时候以恒定的时间查找它们。

AFAIK,这是你能做到的唯一方法。

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

我知道这对你没有用,但在这种情况下你不能使用LINQ,因为多维数组没有实现IEnumerable接口。

所以不要浪费你的时间来解决LINQ问题:)

当您需要计算最大值时,如何迭代所有元素?

如果您将数据放在更易于访问的数据结构中,那么它会让您的生活更轻松,至少支持IEnumerable