есть ли в VB что похожее на паскалевские множества?

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

есть ли в VB что похожее на паскалевские множества?

Сообщение vlas » 20.01.2005 (Чт) 12:21

Привет все. Может кто занет что-то по сабжу...

Может есть функция и объект с помощью которого можна организовать ответ на вопрос присутствует ли данный элемент в последовательности элементов одинакового типа...

Понятно что можна написать простой алгоритм поиска и т.д., но нет ли например такого как в Паскале называется множеством...

Заранее благодарен...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2005 (Чт) 12:28

Именно такого, как в паскале - нет...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vlas
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 15.10.2002 (Вт) 14:20
Откуда: Ukraine

Сообщение vlas » 20.01.2005 (Чт) 12:32

а примерно хоть... если принцып не понятен можно конкретней... может есть функция применимая к массиву... или что-то в этом роде...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2005 (Чт) 12:37

Есть коллекция...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vlas
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 15.10.2002 (Вт) 14:20
Откуда: Ukraine

Сообщение vlas » 20.01.2005 (Чт) 12:46

а может ли коллекция выполнять быстрый поиск по ее элементам?

или просто сказать TRUE если в ней есть запрашиваемый элемент?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2005 (Чт) 12:59

Коллекция - двунаправленный список. Она и правда быстро производит поиск по ключу. А "есть/нет" определяется по тому, срейзился ли эксепшн...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vlas
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 15.10.2002 (Вт) 14:20
Откуда: Ukraine

Сообщение vlas » 20.01.2005 (Чт) 13:06

GSerg писал(а):Коллекция - двунаправленный список. Она и правда быстро производит поиск по ключу. А "есть/нет" определяется по тому, срейзился ли эксепшн...

А с этого места можно поподробнее... или хоть ссылочку на работу с коллекциями...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2005 (Чт) 13:12

dim c as collection

set c=new collection
c.add 1, "key1"
c.add "string", "key2"
c.add obj, "another key"
c.add "without key"

msgbox c("key2")
msgbox c(4)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 20.01.2005 (Чт) 15:18

Учитывая, что паскалевские множества бывают только из простых типов: коллекция, где у каждого элемента ключ равен ему самому - его полная аналогия.

Другая лёгкая реализация, когда значений в коллекции может быть не слишком много - массив Boolean-ов.
Изображение

vlas
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 15.10.2002 (Вт) 14:20
Откуда: Ukraine

Сообщение vlas » 20.01.2005 (Чт) 15:28

но в паскалевских множествах есть очень удобный синтаксис... типа

if елемент IN множество then
write('принадлежит')
else
write('не принадлежит');

а в VB если ниключа ни элемента нет тогда еррор :-(

хотя мона и еррор обработать

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 20.01.2005 (Чт) 16:47

угу... пишешь свой класс и реализуешь метод ElementExists...
Или просто функцию, которая берет коллекцию и элемент
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.01.2005 (Чт) 16:55

Примерно вот такая функция в простой реализации может помочь определить есть ли елемент с ключом sKey в множестве (коллекции) vCollection. В примере подразумевается что в коллекции содержатся строки.


Код: Выделить всё
Function bElementExist (byval sKey As String, byval vCollection as Collection) As Boolean
dim strTmp as String
On Error Goto ErrSub
      strTmp=vCollection.Item(sKey)
      bElementExist=True
      Exit Function

ErrSub:
bElementExist=False
End Function
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

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

Сообщение tyomitch » 20.01.2005 (Чт) 18:07

Rainbow писал(а):угу... пишешь свой класс и реализуешь метод ElementExists...
Или просто функцию, которая берет коллекцию и элемент

Или берёшь коллекцию от E. Morcillo, в которой этот метод есть заранее ;-) ( http://bbs.vbstreets.ru/download.php?id=1120 )

vlas, массив Boolean-ов точно не подходит?
Изображение


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

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

Сейчас этот форум просматривают: Google-бот и гости: 11

    TopList