Предполагая, что у вас должен быть 11-мерный массив (выполняя некоторую работу по М-теории?), И что никакая другая структура данных невозможна, и учитывая, что вы не хотите использовать циклы для поиска максимального значения в массив, который оставляет вам только одну возможность, о которой я могу думать:
Создайте новый класс 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
вы можете сделать его намного проще для чтения, но в этом случае установщик будет немного сложнее, когда вы обновляете максимумы. До вас.