|
Как массив массивов превратить в многомерный массив? | ☑ | ||
---|---|---|---|---|
0
D_Pavel
07.09.16
✎
08:28
|
Есть несколько одномерных массивов лежащих в другом массиве:
Массив["Название"] = ("Яблоки", "Груши", "Арбузы", .......); Массив["Цвет"] = ("Красные", "Желтые", "Зеленые", ......); .................................... Массив["Вкус"] = ("Кислые", "Сладкие", .......); Нужно придумать такой цикл, чтобы составить все возможные комбинации, то есть перемножить все массивы, чтобы получилось что-то типа того: (Яблоки, Красные, Кислые), (Яблоки, Красные, Сладкие), (Яблоки, Желтые, Кислые), ...... (Арбузы, Зеленые, Сладкие) В общем как если бы я написал столько циклов, сколько всего у меня есть вложенных массивов. Но количество массивов может быть разным, я не могу написать заранее все возможные циклы. А писать код программы динамически через Выполнить("Циклы всякие") как-то тупо. Как сделать по другому можно? |
|||
1
DrZombi
гуру
07.09.16
✎
08:30
|
(0) Огласите язык, на котором вы хотите это видеть :)
|
|||
2
mkalimulin
07.09.16
✎
08:30
|
(0) Используй рекурсивный вызов.
|
|||
3
DrZombi
гуру
07.09.16
✎
08:31
|
>>>> Выполнить("Циклы всякие") как-то тупо.
Лень, это движитель прогресса :) |
|||
4
D_Pavel
07.09.16
✎
08:31
|
(1) ну например 1С или ПХП или Бейсик. Смотря на каком умеете писать. Можно просто своими словами
|
|||
5
D_Pavel
07.09.16
✎
08:32
|
(2) Спасибо. Попробую. Если никто ничего лучше не придумает, то темку можно закрыть
|
|||
6
D_Pavel
07.09.16
✎
08:33
|
(3) Факт
|
|||
7
DrZombi
гуру
07.09.16
✎
08:33
|
(4) Цикл, в цикле
Рекурсия, но по сути тот же цикл, только памяти кушает больше. Все заключается не в красивости или банальности рутины, а в использовании предоставленных ресурсов ПК :) |
|||
8
D_Pavel
07.09.16
✎
08:34
|
(7) Цикл в цикле хотел сделать, но не получается.
|
|||
9
Ёпрст
07.09.16
✎
08:35
|
(0) https://forum.antichat.ru/threads/172028/
на 1с-ине NS в своё время реализовывал, еще на клюшках. |
|||
10
Asmody
07.09.16
✎
08:36
|
(0)
шаг 1: написать функцию, которая перемножает два массива. шаг 2: результирующим объявить первый массив шаг 3: вызвать функцию для результирующего и следующего массива, результат функции объявить результирующим шаг 4: повторить шаг 3 для всех остальных массивов |
|||
11
Ёпрст
07.09.16
✎
08:37
|
||||
12
Ёпрст
07.09.16
✎
08:37
|
там есть формулы приведения многомерного массива к одномерному.
|
|||
13
Asmody
07.09.16
✎
08:38
|
(12) Информатика, 9й класс.
|
|||
14
D_Pavel
07.09.16
✎
08:39
|
Спасибо, доны. Ушел писать кот.
|
|||
15
Ластик
07.09.16
✎
08:39
|
Загнать все массивы в запрос и источники указать через запятую (без указания полей по которым соедиять). На выходе будет таблица всех комбинаций.
|
|||
16
D_Pavel
07.09.16
✎
08:41
|
(15) О! Супер! SQL сервер все сделает за меня
|
|||
17
DrZombi
гуру
07.09.16
✎
08:42
|
(8) Печально. Нужно делать 3 цикла с формированием динамического цикла соответствующей структуры :)
|
|||
18
Asmody
07.09.16
✎
08:42
|
(16) Это очень неоптимальное решение.
|
|||
19
D_Pavel
07.09.16
✎
08:42
|
(17) Почему три цикла? Массивов могло быть и шесть
|
|||
20
DrZombi
гуру
07.09.16
✎
08:42
|
(15) А это интересней, и делать почти нечего не надо :)
|
|||
21
DrZombi
гуру
07.09.16
✎
08:43
|
(19) Тогда и циклов будет 6-ть :)
|
|||
22
Asmody
07.09.16
✎
08:44
|
(20) Всего-то прогнать пачку массивов на сервер и обратно
|
|||
23
DrZombi
гуру
07.09.16
✎
08:44
|
+(19) Каждый массив уже идет отдельным массивом, чем он хуже отдельного цикла? :)
|
|||
24
DrZombi
гуру
07.09.16
✎
08:44
|
(22) Ага, ладно там будет 10 элементов. А когда дойдет до миллиона? :)
|
|||
25
DrZombi
гуру
07.09.16
✎
08:45
|
+ А если это будет уже 10 массивов :)
|
|||
26
DrZombi
гуру
07.09.16
✎
08:46
|
Как ни крути, но есть ограничения. И каждый способ будет хорош в своем случаи :)
|
|||
27
Мыш
07.09.16
✎
08:54
|
(14) > Ушел писать кот
Не мучай животинку, сам пиши. |
|||
28
D_Pavel
07.09.16
✎
09:03
|
(22) Лучше прогнать на сервер несколько одномерных массивов чем рекурсия.
|
|||
29
Asmody
07.09.16
✎
09:04
|
(28) Можно написать без рекурсии.
|
|||
30
D_Pavel
07.09.16
✎
09:17
|
(29) Можно. Но все равно быстрее на сервер массивы загнать, чем перемножать массивы на языке высокого уровня.
|
|||
31
CMblCL
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. В результате получаем то, что надо |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |