Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Значение в множестве как в паскале - возможно ли? / 23 сообщений из 23, страница 1 из 1
14.06.2006, 16:44
    #33790845
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Вобщем грабли такие, перерыл msdn - видать плохо рыл.

На паскале есть допустим:
Код: plaintext
1.
2.
3.
if I in [ 1 ,  2 ,  3 ,  6 ,  7 ,  8 ] then
begin
  ...
end;

возможна ли какаянить аналогичная директива в басике,
а то громоздко както
Код: plaintext
select case ...
или куча if совсем не катит
Код: plaintext
if I =  1  or I =  2  then ...
...
Рейтинг: 0 / 0
14.06.2006, 20:40
    #33791466
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Вроде
Код: plaintext
1.
2.
3.
4.
If i Like "[1,2,3,4,5]" Then
...
Else
...
End If

но это я думаю во сто, если не больше раз больше чем
Код: plaintext
1.
2.
3.
4.
5.
Select Case i
Case  1 , 2 , 3 , 4 , 5 
...
Case Else
...
End Select
...
Рейтинг: 0 / 0
14.06.2006, 20:41
    #33791469
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Aklinно это я думаю во сто, если не больше раз больше чем


В смысле медленней
...
Рейтинг: 0 / 0
14.06.2006, 22:50
    #33791595
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
брателло - ты с лайком случаем не попутался?!
...
Рейтинг: 0 / 0
14.06.2006, 22:59
    #33791602
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
> Aklin
Забираю свои слова обратно!
Действительно, ты абсолютно прав!
видать кроме как через like подобного не сделать
Огромное спасибо.
...
Рейтинг: 0 / 0
15.06.2006, 09:31
    #33791858
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Код: plaintext
i =  3 : If i Like "[11,22,33,44,55]" Then MsgBox "OK"
такое поведение мне совсем не нравится.
...
Рейтинг: 0 / 0
15.06.2006, 09:45
    #33791888
AndreyMp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Все работает нормально. Что написал, то и делает. Сам подумай что ты пишешь!
...
Рейтинг: 0 / 0
15.06.2006, 10:33
    #33792042
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
AndreyMpВсе работает нормально. Что написал, то и делает. Сам подумай что ты пишешь!
Да, что написал, то и делает. Но с паскалевским in разница принципиальная.
...
Рейтинг: 0 / 0
15.06.2006, 11:17
    #33792182
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Спасибо за советы.
Мне по большей части по барабану что like на 3 при множестве в котором есть 33 даст истину.
у меня однобайтовые сивмолы для сравнения будут.
писать сотню or'ов не охота.
...
Рейтинг: 0 / 0
15.06.2006, 11:24
    #33792208
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
А ты случаем не строки парсить собрался?
...
Рейтинг: 0 / 0
15.06.2006, 11:49
    #33792335
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
marvanА ты случаем не строки парсить собрался?
нет
...
Рейтинг: 0 / 0
15.06.2006, 12:04
    #33792391
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
У меня то же встречаются в программе конструкции типа Select Case _ Case 1,5,8,11
Не замечал их громоздкости, пока сюда не взглянул.
Если надо переводить много кода на VB где встречаются конструкции in, есть смысл самому написать функцию типа этой.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function IsInArray(v As Variant, ar As Variant) As Boolean
   Dim i As Long
   If IsArray(ar) Then
      For i =  0  To UBound(ar)
         If v = ar(i) Then
            IsInArray = True
            Exit Function
         End If
      Next
   Else
      IsInArray = (v = ar)
   End If
End Function
И пользоваться ей везде:
Код: plaintext
if IsInArray(i, array( 1 ,  2 ,  3 ,  6 ,  7 ,  8 )) then
...
Рейтинг: 0 / 0
15.06.2006, 12:17
    #33792459
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Кстати, о быстродействии:
Во времена Турбопаскаля 6.0 нам советовали как раз OR использовать, т.к. функции над множествами работают медленней (из-за циклических алгоритмов).
Соптимизирует ли это современный дельфи - не знаю.
...
Рейтинг: 0 / 0
15.06.2006, 12:27
    #33792525
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
WorobjoffУ меня то же встречаются в программе конструкции типа Select Case _ Case 1,5,8,11
Не замечал их громоздкости, пока сюда не взглянул.
Если надо переводить много кода на VB где встречаются конструкции in, есть смысл самому написать функцию типа этой.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function IsInArray(v As Variant, ar As Variant) As Boolean
   Dim i As Long
   If IsArray(ar) Then
      For i =  0  To UBound(ar)
         If v = ar(i) Then
            IsInArray = True
            Exit Function
         End If
      Next
   Else
      IsInArray = (v = ar)
   End If
End Function
И пользоваться ей везде:
Код: plaintext
if IsInArray(i, array( 1 ,  2 ,  3 ,  6 ,  7 ,  8 )) then

СПАСИБО БОЛЬШОЕ ЧЕЛОВЕЧЕСКИ ПРОГРАММЕРСКОЕ!
...
Рейтинг: 0 / 0
16.06.2006, 09:44
    #33794596
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Чтото странно ...
пытаюсь сделать:
Код: plaintext
if IsInArray(i, array( 1 ,  2 ,  3 ,  6 ,  7 ,  8 )) then
компиллятор пишет:
Код: plaintext
Error	 21 	'Array' is a type and cannot be used as an expression.
может Inherits или Imports какойнить надо добавить в модуль?
...
Рейтинг: 0 / 0
16.06.2006, 09:50
    #33794615
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Я думаю, под "Array" автором подразумевалось имя массива...
...
Рейтинг: 0 / 0
16.06.2006, 09:53
    #33794623
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
нифига: надо прямое преобразование указателя;
Код: plaintext
1.
  If IsInArray( 3 , CVar(Array( 1 ,  2 ,  3 ,  6 ,  7 ,  8 ))) Then MsgBox "AAA"
...
Рейтинг: 0 / 0
16.06.2006, 09:57
    #33794636
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
серано компиллятор выдает
Код: plaintext
'Array' is a type and cannot be used as an expression.
...
Рейтинг: 0 / 0
16.06.2006, 10:02
    #33794660
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
да, забыл добавить -
Visual Studio 2005
...
Рейтинг: 0 / 0
16.06.2006, 10:04
    #33794671
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function IsInArray_2(v As Variant, ParamArray ar() As Variant) As Boolean
  If UBound(ar) >  0  Then
    Dim i As Integer
    For i =  0  To UBound(ar) -  1 
      If v = ar(i) Then
        IsInArray_2 = True
        Exit Function
      End If
    Next i
  End If
  IsInArray_2 = False
End Function

Но все равно:
Код: plaintext
1.
2.
  If IsInArray_2( 3 ,  1 ,  2 , "3",  7 ,  8 ) Then MsgBox "AAA"
  If IsInArray( 3 , CVar(Array( 1 ,  2 , "3",  7 ,  8 ))) Then MsgBox "AAA"
...
Рейтинг: 0 / 0
16.06.2006, 10:18
    #33794720
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
всеравно таже ошибка компиллятора
...
Рейтинг: 0 / 0
16.06.2006, 11:57
    #33795127
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
KirillovAда, забыл добавить -
Visual Studio 2005Но ведь это - совсем другой язык !!!!!!
И там есть операции с множествами.
:) Но нет вариантных переменных.
...
Рейтинг: 0 / 0
16.06.2006, 12:24
    #33795222
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение в множестве как в паскале - возможно ли?
Worobjoff KirillovAда, забыл добавить -
Visual Studio 2005Но ведь это - совсем другой язык !!!!!!
И там есть операции с множествами.
:) Но нет вариантных переменных.
да я просто в этот форум написал, т.к. много людей в него ходит.
сама функция компиллится без вопросов, но вот не передать ей варинтный массив (((
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Значение в множестве как в паскале - возможно ли? / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]