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

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

Какой самый оптимальный способ сгруппировать массив структур?
Я
   Hipocrisy2013
 
24.04.19 - 12:47
Какой самый оптимальный способ сгруппировать массив?
 
 
   1Сергей
 
1 - 24.04.19 - 12:48
Лесной массив?
   alkorolev
 
2 - 24.04.19 - 12:49
создать Массив2, при обходе Массива1 искать значение в Массиве2. Если не находишь, то добавлять значение в массив2
   Hipocrisy2013
 
3 - 24.04.19 - 12:56
(2) Если нужно какие то поля суммировать, то не очень походит
На ум приходит перебрать массив и построчно добавить в ТЗ, ТЗ свернуть, и назад в массив
Но, столько действий ради какой то банальной операции...
   igork1966
 
4 - 24.04.19 - 12:57
(3) Можно за один проход с использованием например соответствия или структуры. Вопрос только в ключе
   sqr4
 
5 - 24.04.19 - 12:58
(0) Двумерный массив? А зачем данные которые нужно группировать хранить в массиве?
   Chameleon1980
 
6 - 24.04.19 - 13:00
ТЗ в запрос с итогами
   Chameleon1980
 
7 - 24.04.19 - 13:00
+ т.к. ".. Если нужно какие то поля суммировать..."
это уже не массив
   alkorolev
 
8 - 24.04.19 - 13:04
(3) а откуда ты получил массив с коллекцией полей, среди которых есть сумма?
   alkorolev
 
9 - 24.04.19 - 13:05
с ТЗ верная мысль. Но я полагаю, что у тебя массив уже был рожден из ТЗ
   vdss
 
10 - 24.04.19 - 13:08
(3) Ни разу не видел в 1С двухмерные массивы. Обычно такие задачи решаются через ТЗ.Свернуть(), или запросом
   alkorolev
 
11 - 24.04.19 - 13:12
(10) кто сказал, что у него двумерный массив? у него массив с какими то коллекциями. Скорее всего строкаТаблицы или структурами
   Hipocrisy2013
 
12 - 24.04.19 - 13:13
(5)(8) Такой массив формируется типовым функционалом при формировании позиций чека, и заполняется он строкой в цикле ТЧ.
   Hipocrisy2013
 
13 - 24.04.19 - 13:14
ТЧ заранее свернуть не могу, так как у каждой позиции есть свой УИД и в цикле есть пару функций которым требуется этот УИД
   alkorolev
 
14 - 24.04.19 - 13:16
(13) ну, значит, описывай свою ТаблицуЗначений, в нее запихивай строки из Массива и сворачивай Таблицу
   Hipocrisy2013
 
15 - 24.04.19 - 13:16
Короч это не двухмерный массив, это массив структур
   Вафель
 
16 - 24.04.19 - 13:17
проходишь в цикле - ключ в соотвествие, сумму в значение соотвествия
   Hipocrisy2013
 
17 - 24.04.19 - 13:17
(14) Ну да, других вариантов нет
   fisher
 
18 - 24.04.19 - 13:19
(15) Не прошло и 15 сообщений до попытки сформулировать задачу внятно :)
Ок. На входе массив структур. Сворачивать надо по нескольким полям, а по остальным суммировать? Полный аналог свертки ТЗ?
   Hipocrisy2013
 
19 - 24.04.19 - 13:38
(18)"Ок. На входе массив структур. Сворачивать надо по нескольким полям, а по остальным суммировать? Полный аналог свертки ТЗ?" - Всё верно
   igork1966
 
20 - 24.04.19 - 13:41
(19) --> (4)(16)
   Garykom
 
21 - 24.04.19 - 13:44
Где то у меня был свой код на java реализующий Свернуть("КолонкиГруппировки", "КолонкиСуммирования") для объекта своего аналога ТЗ из 1С.
Возможно даже смогу найти, тогда еще гитхаба не было поэтому валяется где то в архивах на не подключенном hdd.

Но там не массивы а через ArrayList
   Garykom
 
22 - 24.04.19 - 13:45
(21)+ Вроде бы через HashTable делал уже не помню за давностью лет.
   fisher
 
23 - 24.04.19 - 14:00
(19) Тогда подозреваю что лучше будет таки в ТЗ и сворачивать. На структурах/соответствиях в 1С много накладных расходов выйдет, несмотря на преимущества хэшированных структур данных. Да и в общем виде эту задачу в 1С решать несподручно. С одним полем в качестве ключа - еще куда ни шло.
   Лефмихалыч
 
24 - 24.04.19 - 14:36
(0) перекидать его в соответствие, например
   Лефмихалыч
 
25 - 24.04.19 - 14:52
(17) есть, но есть очень много НО. Например

Функция ЕслиМутабельныхЗначенийНетИВсёСериализуетсяТоСработает(МассивСтруктур)
  Множество = Новый Соответствие;
  Для каждого Элемент из МассивСтруктур Цикл
    Множество[XMLСтрока(Элемент)] = Истина;
  КонецЦикла;

  СгруппированныйМассив = Новый Массив;
  Для каждого КлючЗначение из Множество Цикл
    СгруппированныйМассив.Добавить(XMLЗначение(КлючЗначение.Ключ));
  КонецЦикла;

  Возврат СгруппированныйМассив;
КонецФункции

но это не волшебная палка и не универсальный механизм. Это вообще не механизм, а решето дырявое. Но при заданных ограничениях сработает. Наверное.


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