Как получить название ключа в коллекции - VB
Формулировка задачи:
Делаю свой класс
который бы, имитировал класс Scripting.Dictionary
остановился на функции возврата списка имен ключей
где я тут чего не доглядел, где что упустил ?
Модуль класса
Листинг программы
- Option Explicit
- Private CL As Collection
- Function Keys()
- 'Вот тут я остановился
- ' Dim f&, v, v1
- ' ReDim v(CL.Count - 1)
- ' For Each v1 In CL
- ' v(f) = CL(f + 1)
- ' f = f + 1
- ' Next
- End Function
- Public Sub Add(Key$, Item)
- CL.Add Item, Key
- End Sub
- Function Exists(Key) As Boolean
- On Error Resume Next
- Call CL.Item(Key)
- If Err.Number Then Else Exists = True
- End Function
- Function Items() As Variant()
- Dim f&, v, v1
- ReDim v(CL.Count - 1)
- For Each v1 In CL
- v(f) = v1
- f = f + 1
- Next
- End Function
- Private Sub Class_Initialize()
- Set CL = New Collection
- End Sub
- Private Sub Class_Terminate()
- Set CL = Nothing
- End Sub
Решение задачи: «Как получить название ключа в коллекции»
textual
Листинг программы
- Private Function ColItem(Key As String, Col As Collection) As Variant
- Dim lpStr As Long, Ptr1 As Long, Ptr2 As Long, sKey As String
- GetMem4 ByVal ObjPtr(Col) + 36, Ptr1
- GetMem4 ByVal ObjPtr(Col) + 40, Ptr2
- Do Until Ptr1 = Ptr2
- GetMem4 ByVal Ptr1 + 16, lpStr
- Select Case VarBstrCmp(ByVal StrPtr(Key), ByVal lpStr, 1, &H30001)
- Case 0: GetMem4 ByVal Ptr1 + 40, Ptr1
- Case 1
- Ptr2 = VarPtr(ColItem)
- GetMem8 ByVal Ptr1, ByVal Ptr2
- GetMem8 ByVal Ptr1 + 8, ByVal Ptr2 + 8
- Exit Function
- Case Else: GetMem4 ByVal Ptr1 + 36, Ptr1
- End Select
- Loop
- MsgBox "Element not found"
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д