3.9 Словари (Dictionary)

12 октября 2022 г.

11:46

Для того, чтобы оставить уникальные значения из коллекции из 2х колонок.

Можно создать 2 словаря, но ключ у них будет пересекаться.

Объявим словари

Dim dictModuleSED As New Dictionary(Of String, String)

Dim dictCategorySED As New Dictionary(Of String, String)

Пробежимся по каждой записи из csv и создадим ключ и поместим запись в оба словаря с одним ключем!

For Each colElement As IEntity In colCCSEDProducts

ModuleSED = colElement.GetValue("CCC_ModuleSED")

CategorySED = colElement.GetValue("CCC_CategorySED")

If not String.IsNullOrEmpty(CategorySED) Then

keyModuleSED_CategorySED = ModuleSED + "_" + CategorySED '(ключ)

If not dictModuleSED.ContainsKey(keyModuleSED_CategorySED) And Not dictCategorySED.ContainsKey(keyModuleSED_CategorySED) Then

dictModuleSED.Add(keyModuleSED_CategorySED,ModuleSED)

dictCategorySED.Add(keyModuleSED_CategorySED,CategorySED)

End If

End If

Next

Потом мы можем перебирая значения одного словаря получать значения из другого словаря по ключу!

For Each pair As KeyValuePair(Of String, String) In dictModuleSED

strQuery = String.Format("Ident_AccProductGroup = N'{0}'", pair.Value)

Session.Source().TryGetSingleValue(Of String)("AccProductGroup","UID_AccProductGroup",strQuery,UID_AccProductGroupSed) 'Получим UID категории модуля СЭД

If Not String.IsNullOrEmpty(UID_AccProductGroupSed) Then

strQuery = String.Format("Ident_AccProductGroup = N'{0}' and UID_AccProductGroupParent = '{1}'", dictCategorySED(pair.Key),UID_AccProductGroupSed)

Session.Source().TryGetSingleValue(Of String)("AccProductGroup","UID_AccProductGroup",strQuery,UID_AccProductGroupSed_Sub) 'Получим UID подкатегории СЭД

If String.IsNullOrEmpty(UID_AccProductGroupSed_Sub) Then 'Если не смогли найти подкатегорию существующую, то создадим ее в ITShop

dbAccProductGroup = Session.Source.CreateNew("AccProductGroup")

dbAccProductGroup.PutValue("Ident_AccProductGroup", dictCategorySED(pair.Key))

dbAccProductGroup.PutValue("UID_AccProductGroupParent", UID_AccProductGroupSed) 'Категория СЭД

dbAccProductGroup.Save(Session)

End If

End If

Next