|
![]() |
#1 |
Участник
|
Два мапа нужно вам из-за того, что вы их в разных местах инициализируете, или для какого-то логического разделения элементов.
Ведь если вопрос только в инициализации, то можно выкрутиться и создать один мап. Передавайте общий мап как параметр в ваши методы и возвращайте его, как результат. Тогда сможете добавить нужные элементы в один мап в нескольких местах еще и от дубликатов избавитесь. Ну а если честно, сколько элементов в сумме в двух мапах получается? Может стоит уже их просто перебрать ![]()
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от plumbum
![]() Два мапа нужно вам из-за того, что вы их в разных местах инициализируете, или для какого-то логического разделения элементов.
Ведь если вопрос только в инициализации, то можно выкрутиться и создать один мап. Передавайте общий мап как параметр в ваши методы и возвращайте его, как результат. Тогда сможете добавить нужные элементы в один мап в нескольких местах еще и от дубликатов избавитесь. Ну а если честно, сколько элементов в сумме в двух мапах получается? Может стоит уже их просто перебрать ![]() А по поводу метода с мапом в кач-ве параметра не совсем понял, если честно. Данным методом я создаю своих 2 мапа X++: void FindSpecForClose() { //view variable -> JourListTrans jour,list; InvoiceInvent invoice,invent; //<- str listKey, invoiceKey; container listCon, invoiceCon; ; ListMap = new Map(Types::String, Types::Container); InvoiceMap = new Map(Types::String, Types::Container); //->add range in query by date if(bydate) queryRun.query().dataSourceNo(1).addRange(fieldnum(JourListTrans,SpDate)).value(strFmt('(SpDate <= %1)', date2strXpp(bydate))); //<- //info(queryRun.query().dataSourceNo(1).toString()); while(queryRun.next()) { jour = queryRun.get(tablenum(JourListTrans)); list = queryRun.get(tablenum(JourListTrans)); invoice = queryRun.get(tablenum(InvoiceInvent)); invent = queryRun.get(tablenum(InvoiceInvent)); listKey = list.InternalSp + "#" + list.ItemId+"#"+tablenum(VendSpListTrans); invoiceKey = invoice.InternalSp + "#" + invoice.ItemId+"#"+tablenum(VendInvoiceTrans); //check in vendSpListTrans if(ListMap.exists(listKey)) { listCon = ListMap.lookup(listKey); listCon = conpoke(listCon,7,conpeek(listCon,7)+list.SumOfSpQty); listMap.insert(listKey,listCon); } else { listMap.insert(listKey,[jour.IDSp, jour.SpDate, jour.RContractAccount,list.InternalSp, list.ItemId, list.SpUnit, list.SumOfSpQty]); } //check in VendInvoiceTrans if(InvoiceMap.exists(invoiceKey)) { invoiceCon = invoiceMap.lookup(invoiceKey); invoiceCon = conpoke(invoiceCon,3,conpeek(invoiceCon,3)+invoice.SumOfQty); InvoiceMap.insert(invoiceKey,invoiceCon); } else { invoiceMap.insert(invoiceKey,[invoice.ItemId, invoice.PurchUnit, invoice.SumOfQty, invoice.InternalSp, invent.UnitId]); } } } ![]() |
|
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
Участник
|
Цитата:
Объединение ещё как такового нет, но перед объединением, да, обрабатываю, а именно: провожу сверку единиц измерения и проверяю равенство сумм. |
|
![]() |
#5 |
Участник
|
Ок, допустим структура данных в мапах разная. Какую структуру должны иметь данные в объединённом мапе?
Вообще говоря в разных элементах одного и тогоже мапа запросто можно хранить контейнеры разной структуры. Вопрос только в том как их обрабатывать. Как вариант можно на первое место в контейнере записывать определяющий структуру признак. Последний раз редактировалось S.Kuskov; 24.10.2013 в 10:52. |
|
![]() |
#6 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Ок, допустим структура данных в мапах разная. Какую структуру должны иметь данные в объединённом мапе?
Вообще говоря в разных элементах одного и тогоже мапа запросто можно хранить контейнеры разной структуры. Вопрос только в том как их обрабатывать. Как вариант можно на первое место в контейнере записывать определяющий структуру признак. Данные должны иметь похожую структуру. Если ключи одинаковые - нужно до внесения в общий мап просуммировать и внести уже готовое значение, если же нет - внести опять-таки в мап... Вот вопрос в обработке и стал, поэтому и обратился к вам за подсказкой. Вы с уважаемым plumbum посоветовали разделять по ключу. То есть, я могу заносить данные в один мап, но с разным ключом или как ?? Что-то вроде такого?? X++: key1 = "#List"+list.itemid+list.intsp; key2 = "#Invoice"+list.itemid+list.intsp; if (map1.lookup(key1)) map1.insert(key1, [someFields]); else map1.insert(key2,[someOtherFields]); |
|
![]() |
#7 |
Участник
|
Цитата:
Зачем вам вообще объединённый мап? может быть вам достаточно по разным мапам собрать объединённое множества ключей? а сами данные оставить в разных мапах? |
|
![]() |
#8 |
Участник
|
Цитата:
Нет я имел в виду вставку разделителя в значение мапа а не в ключ. Тогда смысловая уникальность ключа будет соблюдена, и в тоже время в элементе будет сохранена информация о его структуре. |
|