Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница:

 

  Вопрос: Рекурсивная работа с Dictonary Добавлено: 27.08.08 09:46  

Автор вопроса:  Raptor
Добрый день!

Написал (на VBA 6)небольшой класс для работы с иерархиеческой структурой - можно строить дерево с бесконечным уровнем вложенности. Вот кусок


cDivision.cls
01 Private pName As String
02 Private pCCode As String
03 Private pMach As Boolean
04 Private pLevel As Long
05 Private pUID As Long
06 Private pParentID As Long

07 Public Units As Collection

08 Public Property Let Level(value As Long)
09    pLevel = CLng(value)
10 End Property

11 Public Property Get Level() As Long
12   Level = pLevel
13 End Property



Public Function FindEx(Name As String, Level As Long) As CSubdivision

      Dim Unit As CSubdivision
      Dim Child As CSubdivision
      Dim i As Long

10        If (CStr(Name) = pName) And (CLng(Level) = pLevel) Then
20         Set FindEx = Me
30         Exit Function
40        End If
               
           
50     For Each Child In Units
60         Set Unit = Child.FindEx(Name, Level)
70         If Not (Unit Is Nothing) Then
80             Set FindEx = Unit
90             Exit Function
100        End If
110   Next Child  
           
120       Set FindEx = Nothing
     
130 End Function






Главное тут FindEx - ищет нужную ветвь, рекурсивно высывая себя.
Процедура уходит вглубь на обну ветку, а если там ничего не нашел должен выйти выше на другую ветку, о опять начать спускаться.

Затем захотел использовать не Collection, а Scripting.Dictionary.
Замнил строки на такие:



07 Public Units As Scripting.Dictionary


50    For i = 0 To Units.Count
60    Set Unit = Units.Items(i).FindEx(Name, Level)
70        If Not (Unit Is Nothing) Then
80            Set FindEx = Unit
90            Exit Function
100        End If
110    Next i






Теперь возникает проблема: не хочет возращаться на уровень выше, валиться при вызове Units.Items(i).FindEx(Name, Level), если i=0.

Как бы мне правильно написать? И почему с For Each работает?

Ответить

  Ответы Всего ответов: 0  

Нет ответов

Страница:

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам