Страница: 1 |
Страница: 1 |
Вопрос: Коллеции
Добавлено: 26.12.07 22:20
Автор вопроса: Winand | Web-сайт:
У меня есть две коллекции
То что указано в №1 нужно рисовать зеленым, в №2 - синим, а элементы содержащиеся в обеих - синезеленым. Но суть не в этом)
Как мне организовать алгоритм, чтобы все рисовать только по одному разу?
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-сайт:
Профиль | | #1
Добавлено: 26.12.07 22:24
Если сделать так как сейчас придумано, то при sVisib.Remove(j) из COLLECTION2 тоже удаляются элементы.
P.S.в коллекциях COL.1 и COL.2 максимум где-то по 4 элемента.
Номер ответа: 2
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #4
Добавлено: 28.12.07 17:40
хы) структура данных вообще вот какая:
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 вообще никогда не юзал, адо попробовать.