Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Коллеции Добавлено: 26.12.07 22:20  

Автор вопроса:  Winand | Web-сайт: winandfx.narod.ru
У меня есть две коллекции
То что указано в №1 нужно рисовать зеленым, в №2 - синим, а элементы содержащиеся в обеих - синезеленым. Но суть не в этом)

Как мне организовать алгоритм, чтобы все рисовать только по одному разу?
Dim sVisib As Collection
    Set sVisib = COLLECTION2
    
    For i = 1 To COLLECTION1.Count
        flag = 1
        For j = sVisib.Count To 1 Step -1
            If sVisib(j) = COLLECTION1(i) Then sVisib.Remove (j): flag = 2
        Next j
        sub_i = Val(COLLECTION1(i))
        PNG.RENDER(sub_i, flag)
    Next i
    For i = 1 To sVisib.Count
        sub_i = Val(sVisib(i))
        PNG.RENDER(sub_i, BLUE)
    Next i
End If

Ответить

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

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 26.12.07 22:24
Если сделать так как сейчас придумано, то при sVisib.Remove(j) из COLLECTION2 тоже удаляются элементы.
P.S.в коллекциях COL.1 и COL.2 максимум где-то по 4 элемента.

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 26.12.07 22:26
Неужели через цикл копировать коллекшн2 в sVisib ?!

Ответить

Номер ответа: 3
Автор ответа:
 el-paso



Вопросов: 3
Ответов: 164
 Профиль | | #3 Добавлено: 27.12.07 14:33
Ну.. Если по одному разу, то без дополнительной коллекции не обойтись.
Невооруженным глазом видно, что структура данных неудачная.

Навскидку:


    Dim ToDraw As New Collection
    Dim Colors As New Collection
    '
    Dim i&, x, Item, Key$
    '
    For i = 1 To COLLECTION1.Count
        '
        Item = COLLECTION1(i)
        Key = Str(Item)
        '
        ToDraw.Add Item, Key
        Colors.Add GREEN, Key
        '
    Next i
    '
    For i = 1 To COLLECTION2.Count
        '
        Item = COLLECTION2(i)
        Key = Str(Item)
        '
        On Error Resume Next
        x = ToDraw(Key)
        If Err Then
            ToDraw.Add Item, Key
            Colors.Add BLUE, Key
        Else
            Colors.Remove Key
            Colors.Add BLUEGREEN, Key
        End If
        On Error GoTo 0
        '
    Next i
    '
    For i = 1 To ToDraw.Count
        '
        Item = ToDraw(i)
        Key = Str(Item)
        '
        PNG.RENDER Item, Colors(Key)
        '
    Next i

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 28.12.07 17:40
хы) структура данных вообще вот какая:
Public Type MapType
    Name As String 'Имя карты - для заголовка окна
    map_descript As String 'Описание карты
    map_path As String 'Путь к карте
    map_file As String 'Полный путь к карте
    MainScreen As String 'Глобальная карта (рисунок)
    PreviewPic As String 'Превью (рисунок)
    PlayerNum As Long 'Кол-во игроков
    LocNumber As Long 'Кол-во локаций
    LocInfo() As New Collection 'Параметры локации
    LocBuild() As New Collection 'Параметры зданий
    LocAvail() As New Collection 'Доступные для перехода локации
    LocVisib() As New Collection 'Видимые локации
End Type

То есть тут не коллекции даже, а массивы коллекций. Так удобнее мне, да и скорость нормальная. А вот Key вообще никогда не юзал, адо попробовать.

Ответить

Страница: 1 |

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



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