|
Многомерный массив - индекс за пределами... | ☑ | ||
---|---|---|---|---|
0
Rounder
29.12.11
✎
10:17
|
Вроде не пятница - а туплю.
Задача - есть толпа строковых значений в списке СписПодр, нужно их поместить в двумерный массив по 5 в строку. Что я делаю не так? МассивПодразделений = Новый Массив; Для Сч = 0 По СписПодр.Количество() - 1 Цикл МассивПодразделений[Цел(Сч/5)][Сч] = СписПодр[Сч].Значение.Наименование; КонецЦикла; Получаю ошибку на первом же элементе, что индекс находится за границами... |
|||
1
Ненавижу 1С
гуру
29.12.11
✎
10:20
|
Ну а кто память под элементы будет выделять?
|
|||
2
Maxus43
29.12.11
✎
10:23
|
Описание:
Создает массив из указанного количества элементов. Если задано несколько параметров, то будет создан массив, элементами которого являются массивы (и т.д. в зависимости от количества параметров). Фактически, конструктор позволяет создать массивы массивов, которые могут являться аналогом многомерного массива. Пример: // массив с 0 элементами Массив1 = Новый Массив; // массив из 10 элементов, // каждый из которых является массивом из 2 элементов, // каждый из которых является массивом из 4 элементов Массив2 = Новый Массив(10,2,4); |
|||
3
Rounder
29.12.11
✎
10:25
|
Т.е. динамически массив может создаваться только одномерный?
|
|||
4
vmv
29.12.11
✎
10:26
|
МассивПодразделений = Новый Массив;
ВложенныйМассив = Новый Массив; ШагВыборки = 0; Для Сч = 0 По СписПодр.Количество() - 1 Цикл ВложенныйМассив.Добавить(СписПодр[Сч].Значение.Наименование); Если ШагВыборки = 5 Тогда МассивПодразделений.Добавить(ВложенныйМассив); ВложенныйМассив = Новый Массив; ШагВыборки = 0; КонецЕсли; ШагВыборки = ШагВыборки + 1; КонецЦикла; как то так, ето элементарно Ватсон) |
|||
5
Maxus43
29.12.11
✎
10:26
|
т.е. МассивПодразделений = Новый Массив - создаёт пустой одномерный массив
|
|||
6
Rounder
29.12.11
✎
10:29
|
Спасибо ответившим.
Думал по иному... :) а (5), фактически (3), только другими словами :) |
|||
7
vmv
29.12.11
✎
10:31
|
Если ШагВыборки = 5 Тогда
МассивПодразделений.Добавить(ВложенныйМассив); ШагВыборки = 0; КонецЕсли; МассивПодразделений.Добавить(ВложенныйМассив); тут вроде копировать нужно вложенный ибо ВложенныйМассив = Новый Массив; может "убить" сохраненный вложений, массивы работают напрмую с памятью, также как указатели в срр, собственно платформа на срр писана - посему так себя и ведут |
|||
8
vmv
29.12.11
✎
10:33
|
вообще когда уже в платформу введут указатели, уже итак ввели столько щняг, что студентам, щкольникам и девущкам - догора закрыта в 1С.
так почему бы не ввести еще и указатели) |
|||
9
Rounder
29.12.11
✎
10:34
|
:)))
|
|||
10
Ненавижу 1С
гуру
29.12.11
✎
10:36
|
(8) ага, еще и ссылки (Си++) только у них тут и так заворуха - уже есть ссылки на таблицыи объекты - ссылочного типа
|
|||
11
vmv
29.12.11
✎
10:38
|
(10) ну ведь с Null и Неопределено все уже пришли к согласию, думаю ничто не помешает прийти к согласию и с понятиями Объект.Ссылка, &Объект )
|
|||
12
Maxus43
29.12.11
✎
10:40
|
(11) с Неопределено он не смирится никак
|
|||
13
Ненавижу 1С
гуру
29.12.11
✎
10:42
|
(12) да, я против, согласен на Неопределено как пустой указатель максимум
|
|||
14
Maxus43
29.12.11
✎
10:43
|
(13) есть один важный нюанс... Нуралиеву пофиг на что ты согласен) Что имеем то и имеем
|
|||
15
vmv
29.12.11
✎
10:45
|
(12) кто с++? дык, техология разработки платформы исторически построена на метотодологии - урви лучшее в популярных системах программирования и выдай в 1С. Откуда в 1С механизмы мхл, коллекций и пр., еще на заре 7.7 был договор с мелкомягкими на слив библиотек офисс в 1С.
можно заключить такой же договора с другими прозябающими на безрыбье системами. Все равно весь мир уже кодит на 1С, глупо зажимать системный функционал и не поделиться) |
|||
16
Ненавижу 1С
гуру
29.12.11
✎
10:46
|
(14) а вот с этим я полностью согласен
|
|||
17
Ненавижу 1С
гуру
29.12.11
✎
10:46
|
(15) "весь мир уже кодит на 1С"
еще скажи вся Вселенная |
|||
18
vmv
29.12.11
✎
10:48
|
(17) бери выше, есть уже конфы "1С: Небожители", "1С: Райский сад", "1С: Управление адом"
|
|||
19
Rounder
29.12.11
✎
10:56
|
Сделал так...
МассивПодразделений = Новый Массив; ВложенныйМассив = Новый Массив; Для Сч = 0 По СписПодр.Количество() - 1 Цикл Если Цел((Сч + 1)/5) = (Сч + 1)/5 Тогда ВложенныйМассив.Добавить(СписПодр[Сч].Значение.Наименование); МассивПодразделений.Добавить(ВложенныйМассив); ВложенныйМассив.Очистить(); Иначе ВложенныйМассив.Добавить(СписПодр[Сч].Значение.Наименование); КонецЕсли; КонецЦикла; |
|||
20
vmv
29.12.11
✎
11:01
|
(19) если работате как надо, то почему не вынесено из условия
ВложенныйМассив.Добавить(СписПодр[Сч].Значение.Наименование); надо же к чему-то придраться, представь, что ты на аттестации) |
|||
21
vmv
29.12.11
✎
11:02
|
и зачем в цикле ИНАЧЕ, лишния, ацдке непроизводительная, инструкция компилятору
|
|||
22
vmv
29.12.11
✎
11:04
|
да и проверку кратности 5 нужно делать через остаток от деления %, а не кащмарной операцией вичисления.
садис - два!) |
|||
23
Rounder
29.12.11
✎
11:04
|
Логично.
Учусь же :) Сча все поправлю и оптимизирую |
|||
24
Rounder
29.12.11
✎
11:16
|
Вообще красота...
МассивПодразделений = Новый Массив; ВложенныйМассив = Новый Массив; Для Сч = 0 По СписПодр.Количество() - 1 Цикл ВложенныйМассив.Добавить(СписПодр[Сч].Значение.Наименование); Если (Сч + 1)%5 = 0 Тогда МассивПодразделений.Добавить(ВложенныйМассив); ВложенныйМассив.Очистить(); КонецЕсли; КонецЦикла; |
|||
25
vmv
29.12.11
✎
11:19
|
(24) теперь можно оформлять патент и жить припеваючи на отчисления с этого алгоритма
|
|||
26
Rounder
29.12.11
✎
11:23
|
С тобой же придется делиться :)
|
|||
27
Maxus43
29.12.11
✎
11:28
|
(26) со всеми из этой ветки, а то в суд подадим
|
|||
28
Rounder
29.12.11
✎
11:34
|
Подвели вы меня ребята... Эх...
Пошел получать патент - а там проверили алгоритм и завернули на исправление... |
|||
29
Rounder
29.12.11
✎
12:02
|
Вобщем пришлось делать так:
Кол = СписПодр.Количество(); МассивПодразделений = Новый Массив(Цел(Кол/5) + 1, 5); Для Сч = 0 По Кол - 1 Цикл МассивПодразделений[Цел(Сч/5)][Сч%5] = СписПодр[Сч].Значение.Наименование; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |