Имя: Пароль:
1C
1С v8
Порядок элементов в массиве
0 Septera
 
19.08.19
16:15
Обратил внимание в ДО на такой код:
// Сортировка виджетов по наименованию
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Виджеты.Ссылка
|ИЗ
|Справочник.Виджеты КАК Виджеты
|ГДЕ
|Виджеты.Ссылка В(&Виджеты)
|
|УПОРЯДОЧИТЬ ПО
|Виджеты.Наименование";
Запрос.УстановитьПараметр("Виджеты", ДоступныеВиджеты);

Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");

Насколько я помню Массив на гарантирует сохранение порядка элементов заданного при создании/добавлении элементов. Очередной говнокод от 1С или я что-то путаю?
1 НадюшаЯ
 
19.08.19
16:17
Подпишусь
2 OldCondom
 
19.08.19
16:18
что запрос вывел, то в массив и получил, какие к нему вопросы? Это ты с результатом запроса и его отсутствием гарантий скорее всего путаешь.
3 Вафель
 
19.08.19
16:18
массив не гарантирует порядка?
это что то новенькое
4 OldCondom
 
19.08.19
16:18
ой
5 mistеr
 
19.08.19
16:18
(0) Что-что не гарантирует?

Ты что-то путаешь.
6 OldCondom
 
19.08.19
16:18
не заметил УПОРЯДОЧИТЬ ПО. Но сути н е меняет.
7 aleks_default
 
19.08.19
16:19
(0)Чейто?
8 mistеr
 
19.08.19
16:19
(2) Скорее всего, он путает с ТаблицаЗначений.Сортировать()
9 aleks_default
 
19.08.19
16:20
Элементы массива же по индексу получают, как это не гарантирует?
10 Septera
 
19.08.19
16:20
(3) да сталкивался и не раз причем, когда добавляешь элементы в определенном порядке, а при обходе выбираются вообще в другом, я сейчас поищу ветка даже такая была...
11 Dionis Sergeevich
 
19.08.19
16:22
Массив гарантирует порядок, не гарантирует например HashMap
12 OldCondom
 
19.08.19
16:24
(10) ты хочешь сказать, что если я создам массив и сделаю .добавить("а"), добавить("б"), то есть вероятность дальше в коде массив[0] получить "б"?. Ты серьезно?
13 novichok79
 
19.08.19
16:25
может быть я чего-то путаю, но по-моему, если непустому массиву сделать ЗначениеВСтрокуВнутр, то в полученной строке, элементы идут в таком же порядке, в котором они туда помещались.
14 Septera
 
19.08.19
16:26
Походу со Структурой перепутал:
"К элементам Структуры обращаются только по имени Ключа. Тем не менее, цикл Для каждого из работает и для Структуры, но опираться на порядок элементов Структуры не следует."
15 dexter_86
 
19.08.19
16:27
Запрос.Выполнить().Выгрузить() - это результат запроса в виде ТЗ. В запросе есть упорядочивание. То есть результат будет выгружен в ТЗ в определенном порядке. ВыгрузитьКолонку(Ссылка) - выгрузить колонку результата в том виде, который попал в результат при упорядочивании. То есть за порядок отвечает не массив, а сам запрос в данном случае.
16 dezss
 
19.08.19
16:30
(14) ага....и сразу на форум 1С поливать...
17 Septera
 
19.08.19
16:30
С 1С становишься мнительным и теряешь доверие к здравому смыслу:))
Но вот со Структурой все же видимо порядок не гарантируется, так что не умничайте! :D
18 OldCondom
 
19.08.19
16:33
(17) какой порядок без индексов? О чем ты блин?
19 Dionis Sergeevich
 
19.08.19
16:34
(17) это не только в 1с - это везде в подобных коллекциях
20 dezss
 
19.08.19
16:34
(17) Структура не предполагает подобного.
Дело не в 1С)
21 Cyberhawk
 
19.08.19
16:38
Вроде везде в коллекциях неизменность порядка гарантируется, если есть [] или метод "Получить", кроме соответствия
22 dezss
 
19.08.19
16:39
Но так-то структура тоже порядок сохраняет. Собственно по порядку добавления элементов.
23 Cyberhawk
 
19.08.19
16:40
(22) Конечно нет
24 dezss
 
19.08.19
16:49
(23) Ну порядок не гарантируется, но все-таки сохраняется.
25 olegves
 
19.08.19
16:55
(22) у структуры нет добавить, а есть только вставить - о каком порядке добавления ты?
26 dezss
 
19.08.19
16:58
(25) Блин...я не про методы. Ладно, пусть будет по порядку вставки, так понятней?)))
27 Мимохожий Однако
 
19.08.19
17:22
Делай массив строками со структурой "НомерПоПорядку,Виджеты".
После считывания массива преобразуй в ТЗ, отсортируй, используй
28 Cyberhawk
 
20.08.19
08:24
(24) Не баклань
29 fisher
 
20.08.19
08:54
Не знаю ни одного языка, где в массивах не гарантируется порядок. Порядок - ключевое свойство массива.
30 VladZ
 
20.08.19
09:10
(0) Я не понял, в чем вопрос.
"Насколько я помню Массив на гарантирует сохранение порядка элементов заданного при создании/добавлении элементов." - да, не гарантирует.

Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - порядок в массиве будет таким, как в полученном запросе.

Вопрос-то в чем?
31 fisher
 
20.08.19
09:48
(28) Потестил - вроде как структура таки порядок добавления сохраняет... Видать в 1С специально об этом позаботились (в java, например, есть LinkedHashSet, сохраняющий порядок добавления элементов. В питоне тоже вроде есть какие-то хэшированные структуры с сохранением порядка добавления). Не знаю только, зачем. А вот соответствие - нет.
32 fisher
 
20.08.19
09:52
Гы. Почитал про реализацию LinkedHashSet - там тупо параллельно с HashMap используется LinkedList. Для доступа по ключу используется мапа, а для итерации - лист :)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн