2011-03-18 2 views
0

Есть ли простой способ подделать многомерный массив неизвестного размера, используя плоский? У меня есть приложение, в котором 90% использования массива будет проще/быстрее без использования рекурсии и единственного требования, которое должно добавить некоторую глубину в массив. Единственный способ, которым я могу думать об этом будет держать бегущий список стартовых показателей и конечных показателей, где массив 1D будет выглядеть следующим образом:Поддельный многомерный массив с плоским?

[0] = 1 
[1] = 2 
[2] = 3 
[3] = 4 
[4] = 5 

... и начало/конец списка будет выглядеть следующим образом :

Start  End 
-----  --- 
[0] = 1 [0] = 2 
[1] = 3 [1] = 4 

что будет представлять собой Многомерный массив, который выглядит следующим образом:

[0] = 1 
[1] = [0] = 2 
     [1] = 3 
[2] = [0] = 4 
     [1] = 5 

Это будет работать с более чем 2-х измерениях, но на тот момент у меня возникает проблемы выяснить час ow, чтобы определить, какая глубина I была указана в индексе в исходном массиве 1D и в начальных/конечных списках. Мне также сложно определить, какие поисковые термины использовать для поиска такого типа вещей. Любые общие рекомендации/идеи будут оценены. Благодарю.

Редактировать - Чтобы дать некоторый контекст, это для поддержки вложенных транзакций в реализации шаблона команды. 1D-массив содержит команды, а искусственная глубина только там, чтобы давать имена каждой транзакции. Поскольку транзакции будут использоваться экономно, кажется очевидным, что быстрый переход к небольшому списку int будет быстрее, чем рекурсивно проходить через многомерный массив команд и проверять в каждом индексе, была ли или нет одна команда или массив команд внутри.

+2

Мне кажется, что любые выгоды, которые вы получите от избежания рекурсии (и почему вам нужно было бы списать?), Будут разжевываться из-за боли в поддержании этих искусственных глубин. –

+0

Вы думаете, что жонглирование вокруг трех отдельных массивов будет лучше, чем рекурсия и реальные многомерные массивы? Я надеюсь, что вы проведете значительный сравнительный анализ, прежде чем идти по этому пути. – meagar

+0

@Marc B & @meagar: см. Правки, которые дают немного больше контекста. – Ocelot20

ответ

0

В целом, сохранение конечных положений кажется излишним. Массив завершается, когда начинается следующий массив, не так ли?

Во-вторых, проблема в том, что для каждого дополнительного измерения вам нужны дополнительные списки поиска, если только они не имеют фиксированного размера. Я не знаю, подходит ли это для того, чтобы быть более эффективным, чем ваше оригинальное решение.

+0

С 2D-массивом текущий массив заканчивается, где начинается следующий, но в трехмерном массиве внутри могут быть два массива. Таким образом, верхний уровень не закончится правильно, когда первый вложенный конец закончится, он закончится, когда второй вложенный. – Ocelot20

+0

@ Ocelot20: Вы правы, это относится только к последнему измерению. –

Смежные вопросы