Faust писал(а):Есть ли структура данных, позволяющая динамическое добавление/удаление элементов и способная возвратить индекс элемента по его значению (значения не повторяются)?
Ennor писал(а):Индекс по значению??? Обычно требуется обратное. Что ж ты такое пишешь, если не секрет.
Key = "_" & CStr(MyStruct.ID)
Dim V as MyStruct, NewStruct as MyStruct
' Fill NewStruct members here
'...
' We need it, sorry
On Error Resume Next
' Try to get item with this key, if it exists
V = Coll("_" & CStr(NewStruct.ID))
' Check for existence
If Err.Number <> 0 Then
' Item already exists, rollback transaction
Else
' Add NewStruct to the collection
End If
' Restore error handler
On Error Goto EH
Ennor писал(а):Нет, даже не так... Тут нужен ключ, формируемый по заданному алгоритму.
Скажем так: при добавлении своей структуры в коллекцию ты задаешь ей ключ, сделанный вот так:Внутренняя реализация коллекции такова, что если передаваемое ей значение ключа преобразовывается в численный тип (IsNumeric(Key) = True, проще говоря), то она дает отлуп и файрит ошибку. Это сделано ради универсализации свойства Item(Key as Variant), которое, в зависимости от типа переданного аргумента, расценивает его либо как порядковый индекс (если это число), либо как ключ (если это строка). ... Полагаю, зачем в начале ключа ставится символ подчеркивания, всем понятно - чтобы за число не посчитало.
- Код: Выделить всё
Key = "_" & CStr(MyStruct.ID)
Сейчас этот форум просматривают: AhrefsBot и гости: 13