2010-05-28 67 views
4
  • 我在C#中有2個名爲Arr1Arr2的數組。 他們是完全相同的尺寸...

我需要ARR1的對應最大的ARR2元素與給定的指標開始的元素...C#數組最大值


獲取的指標的Arr2 [ 1 , 10 , 3 , i , j ]最大所有ij
返回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 ..

+4

11維? ** 11 **尺寸?你確定關係數據庫不會比數組更好嗎? – Powerlord 2010-05-28 20:14:49

+1

11維... – 2010-05-28 20:15:10

+0

是的..這是某種模式分類問題.. – Betamoo 2010-05-28 20:16:17

回答

1

假設你必須有一個11維數組(做一些M理論工作?),並且沒有其他數據結構是可能的,並且假定你不想使用循環來找到最大值該陣列,是留給你,我能想到的只有一個可能:

擁有兩個私人領域,一個是價值觀,一個用於最大值創建一個新的ManagedArray類。
創建一個包含11個索引參數的索引器。將得到的是簡單與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類的實例。

我們所做的是在請求時(當您想知道最大值時)使用稍微更耗時的數組設置器來交易循環,該設置器會追蹤最大值,以便我們可以在需要時定期查找它們。

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

請注意,您可以通過使用params關鍵字使其更容易閱讀,但當您更新最大值時,設置器會稍微複雜一些。由你決定。

+0

+1爲M理論工作 – vitorbal 2010-06-01 19:05:53

0

我知道這不會真正幫助你,但你不能在這種情況下使用LINQ,因爲多維數組不實現IEnumerable接口。

所以,不要浪費你的時間與LINQ :)解決您的問題

0

你怎麼能不迭代過,當你需要計算最大值的所有元素?

伊莫如果你放置你的數據在一個更方便的數據結構,至少一些支撐IEnumerable<T>它會使你的生活更輕鬆。