Вход | Регистрация



Как массив массивов превратить в многомерный массив?

Как массив массивов превратить в многомерный массив?
Я
   D_Pavel
 
07.09.16 - 08:28
Есть несколько одномерных массивов лежащих в другом массиве:

Массив["Название"] = ("Яблоки", "Груши", "Арбузы", .......);
Массив["Цвет"] = ("Красные", "Желтые", "Зеленые", ......);
....................................
Массив["Вкус"] = ("Кислые", "Сладкие", .......);

Нужно придумать такой цикл, чтобы составить все возможные комбинации, то есть перемножить все массивы, чтобы получилось что-то типа того:

(Яблоки, Красные, Кислые), (Яблоки, Красные, Сладкие), (Яблоки, Желтые, Кислые), ...... (Арбузы, Зеленые, Сладкие)

В общем как если бы я написал столько циклов, сколько всего у меня есть вложенных массивов. Но количество массивов может быть разным, я не могу написать заранее все возможные циклы. А писать код программы динамически через Выполнить("Циклы всякие") как-то тупо.

Как сделать по другому можно?
 
 
   DrZombi
 
1 - 07.09.16 - 08:30
(0) Огласите язык, на котором вы хотите это видеть :)
   mkalimulin
 
2 - 07.09.16 - 08:30
(0) Используй рекурсивный вызов.
   DrZombi
 
3 - 07.09.16 - 08:31
>>>> Выполнить("Циклы всякие") как-то тупо. 

Лень, это движитель прогресса :)
   D_Pavel
 
4 - 07.09.16 - 08:31
(1) ну например 1С или ПХП или Бейсик. Смотря на каком умеете писать. Можно просто своими словами
   D_Pavel
 
5 - 07.09.16 - 08:32
(2) Спасибо. Попробую. Если никто ничего лучше не придумает, то темку можно закрыть
   D_Pavel
 
6 - 07.09.16 - 08:33
(3) Факт
   DrZombi
 
7 - 07.09.16 - 08:33
(4) Цикл, в цикле
Рекурсия, но по сути тот же цикл, только памяти кушает больше.

Все заключается не в красивости или банальности рутины, а в использовании предоставленных ресурсов ПК :)
   D_Pavel
 
8 - 07.09.16 - 08:34
(7) Цикл в цикле хотел сделать, но не получается.
   Ёпрст
 
9 - 07.09.16 - 08:35
(0) https://forum.antichat.ru/threads/172028/

на 1с-ине NS в своё время реализовывал, еще на клюшках.
   Asmody
 
10 - 07.09.16 - 08:36
(0)
шаг 1: написать функцию, которая перемножает два массива.
шаг 2: результирующим объявить первый массив
шаг 3: вызвать функцию для результирующего и следующего массива, результат функции объявить результирующим
шаг 4: повторить шаг 3 для всех остальных массивов
 
 Рекламное место пустует
   Ёпрст
 
11 - 07.09.16 - 08:37
   Ёпрст
 
12 - 07.09.16 - 08:37
там есть формулы приведения многомерного массива к одномерному.
   Asmody
 
13 - 07.09.16 - 08:38
(12) Информатика, 9й класс.
   D_Pavel
 
14 - 07.09.16 - 08:39
Спасибо, доны. Ушел писать кот.
   Ластик
 
15 - 07.09.16 - 08:39
Загнать все массивы в запрос и источники указать через запятую (без указания полей по которым соедиять). На выходе будет таблица всех комбинаций.
   D_Pavel
 
16 - 07.09.16 - 08:41
(15) О! Супер! SQL сервер все сделает за меня
   DrZombi
 
17 - 07.09.16 - 08:42
(8) Печально. Нужно делать 3 цикла с формированием динамического цикла соответствующей структуры :)
   Asmody
 
18 - 07.09.16 - 08:42
(16) Это очень неоптимальное решение.
   D_Pavel
 
19 - 07.09.16 - 08:42
(17) Почему три цикла? Массивов могло быть и шесть
   DrZombi
 
20 - 07.09.16 - 08:42
(15) А это интересней, и делать почти нечего не надо :)
   DrZombi
 
21 - 07.09.16 - 08:43
(19) Тогда и циклов будет 6-ть :)
   Asmody
 
22 - 07.09.16 - 08:44
(20) Всего-то прогнать пачку массивов на сервер и обратно
   DrZombi
 
23 - 07.09.16 - 08:44
+(19) Каждый массив уже идет отдельным массивом, чем он хуже отдельного цикла? :)
   DrZombi
 
24 - 07.09.16 - 08:44
(22) Ага, ладно там будет 10 элементов. А когда дойдет до миллиона? :)
   DrZombi
 
25 - 07.09.16 - 08:45
+ А если это будет уже 10 массивов :)
   DrZombi
 
26 - 07.09.16 - 08:46
Как ни крути, но есть ограничения. И каждый способ будет хорош в своем случаи :)
   Мыш
 
27 - 07.09.16 - 08:54
(14) > Ушел писать кот
Не мучай животинку, сам пиши.
   D_Pavel
 
28 - 07.09.16 - 09:03
(22) Лучше прогнать на сервер несколько одномерных массивов чем рекурсия.
   Asmody
 
29 - 07.09.16 - 09:04
(28) Можно написать без рекурсии.
   D_Pavel
 
30 - 07.09.16 - 09:17
(29) Можно. Но все равно быстрее на сервер массивы загнать, чем перемножать массивы на языке высокого уровня.
   CMblCL
 
31 - 07.09.16 - 10:58
(0)
Алгоритм:
Имеем, например массивы
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]

1. Копируем полностью первый массив в результат - массив массивов так, что каждый элемент представляет из себя массив с единственным элементом:

Результат:
[[1], [2], [3]]

2. Вычисляем количество элементов второго массива из дано [3] и в результате каждый массив копируем столько раз

Результат:
[[1], [1], [1],
[2], [2], [2],
[3], [3], [3]]

3. записываем элементы второго массива из дано в массивы результата пока не запишем в каждый по одному элементу, (когда массив заканчивается идем сначала)

Результат:
[[1, 4], [1, 5], [1, 6],
[2, 4], [2, 5], [2, 6],
[3, 4], [3, 5], [3, 6]]

4. Повторить пункты 2 и 3 для всех массивов из дано

5. В результате получаем то, что надо


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует