Поддельный многомерный массив с плоским? - PullRequest
0 голосов
/ 18 марта 2011

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

[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

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

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

1 Ответ

0 голосов
/ 18 марта 2011

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

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

...