Перебор переменных

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Перебор переменных

Сообщение VERITAS » 19.02.2005 (Сб) 10:12

Привет Всем..
Подскажите как перебирать переменные в цикле.

Что то типа есть:
Dim xx1 as string
и так до
Dim xx100 as string

Как их каждые проверить чтобы было типа:
For i = 1 to 101
If xx? = "True" then MsgBox xx?
Next i

Очень нужно,,,
И еще как эти самые переменные тем же способом в цикле объявлять с увеличением на единицу ??
No comments ...

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 19.02.2005 (Сб) 10:13

А массив не ага? :roll:

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 19.02.2005 (Сб) 10:38

2 A.A.Z.
Может он и не знает что такое массив, всё-таки статус "Новичёк" ?

Пример кода:

Код: Выделить всё
Dim xx(100) as string
Dim I as Long
xx(1)=1
For I=2 to 100
     xx(i)=xx(i-1)+1
Next

skord
Китаец
Китаец
 
Сообщения: 572
Зарегистрирован: 14.10.2004 (Чт) 15:36
Откуда: Иркутск

Сообщение skord » 19.02.2005 (Сб) 11:26

А без массива слабо?)))))

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 19.02.2005 (Сб) 11:28

Нет, но так проще

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 19.02.2005 (Сб) 11:50

Sirik Спсибо :!:

А насчет массивов - на самом деле не работал еще с ними.
No comments ...

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 19.02.2005 (Сб) 11:53

2VERITAS
Сегожня без них никуда! (конечно если решаешь простые задачи)

skord
Китаец
Китаец
 
Сообщения: 572
Зарегистрирован: 14.10.2004 (Чт) 15:36
Откуда: Иркутск

Сообщение skord » 19.02.2005 (Сб) 12:15

Sirik писал(а):Нет, но так проще

?
:roll: может я чего нить не знаю... а как без массива?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 19.02.2005 (Сб) 16:22

Коллекцией

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 19.02.2005 (Сб) 16:32

конечно коллекцией, но это уже элементы ООП.
я думаю, человеку, которые не знал как работать с массивами, рановато объяснять что такое коллекция ?...

ЗЫ. кстати, в коллекции лучше реализовано удаление элементов, так в массиве вобще никак (кроме как переначначить длину и переписать значения)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 19.02.2005 (Сб) 17:02

skord писал(а):?
:roll: может я чего нить не знаю... а как без массива?


Я и не спорю, объяснять коллекции чуть-чуть рановато (может, и нет? :?), просто отвечаю на вопрос...

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 20.02.2005 (Вс) 0:20

Может и не рано (лучше раньше чем позже) :!:

Я немного знаком с элементами ООП. И буду рад уроку по коллекциям...
No comments ...

Серый
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 06.11.2004 (Сб) 10:51

Сообщение Серый » 20.02.2005 (Вс) 10:44

Объявление коллекции:
Private My_Col As New Collection

Твоя процедура:
Dim I as Long
Set My_Col=New Collection
For I=1 To 100
My_Col.Add I
Next

В итоге твоя коллекция будет заполненна элементами-цифрами с 1 до 100.

Очень удобно удалять элемент:
My_Col.Remove <номер элемента>

Количество элементов в коллекции:
My_Col.Count

ЗЫ. Только не забудь при Unload_Form поставить
Set My_Col=Nothing

Серый
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 06.11.2004 (Сб) 10:51

Сообщение Серый » 20.02.2005 (Вс) 10:51

Кстати, вот тут вопросик один возник:
с чем будет быстрей работать с массивом или с коллекцией?
ЗЫ. в смысле какой код будет быстрее работать?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 20.02.2005 (Вс) 11:21

А проверить самому - не ага? :?

Код: Выделить всё
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private My_Col As New Collection

Private Const N As Long = 10000

Private xx(1 To N) As Long
Private i As Long
Private t1 As Long, t2 As Long

Private Sub Form_Load()
Set My_Col = New Collection

t1 = GetTickCount
My_Col.Add 1
For i = 2 To N
    My_Col.Add My_Col(i - 1) + 1
Next
t2 = GetTickCount
Me.Print Round((t2 - t1) / 1000, 2) & " ñ."

t1 = GetTickCount
xx(1) = 1
For i = 2 To N
     xx(i) = xx(i - 1) + 1
Next
t2 = GetTickCount
Me.Print Round((t2 - t1) / 1000, 2) & " ñ."
Me.Show
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set My_Col = Nothing
End Sub


Этот код для N=10000 выдавал:
коллекции - 5.59-5.81 с.
массив - 0-0.1 с.

Для N=1000 оба показателя крайне близки к нулю...

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 20.02.2005 (Вс) 11:23

2 Серый: ИМХО, массивы быстрее :roll:
2 VERITAS: в коллекциях еще удобно For..Each использовать :roll: Например, чтобы всем Label'ам на форме сделать шрифт жирным, нужно применить следующий код:
Код: Выделить всё
Dim lbl As Label

Sub Form_Load()
For Each lbl In Controls
lbl.Font.Bold = True
Next
End Sub

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 20.02.2005 (Вс) 12:48

Тогда возникает: вопрос зачем же использовать коллекции, если скорость их выполнения намного медленнее массива :?:
No comments ...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 20.02.2005 (Вс) 12:50

Серый писал(а):Очень удобно удалять элемент:
My_Col.Remove <номер элемента>

Количество элементов в коллекции:
My_Col.Count


A.A.Z. писал(а):2 VERITAS: в коллекциях еще удобно For..Each использовать :roll:


Amed писал(а):Для N=1000 оба показателя крайне близки к нулю...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.02.2005 (Вс) 13:33

A.A.Z. писал(а):в коллекциях еще удобно For..Each использовать :roll:

А что мешает использовать For Each (зачем там у тебя две точки?) с массивами?
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.02.2005 (Вс) 13:35

VERITAS писал(а):Тогда возникает: вопрос зачем же использовать коллекции, если скорость их выполнения намного медленнее массива :?:

В них возможен быстрый поиск по ключу.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 6

    TopList