Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Принадлежность переменной к множеству / 8 сообщений из 8, страница 1 из 1
08.05.2019, 10:44
    #39811156
VistaSV30
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность переменной к множеству
Добрый день!

Подскажите есть в VB возможность проверить, что переменная принадлежит к множеству значений?
Вместо
Код: vbnet
1.
If i=1 Or i=5 Or i=7 Then ...




Возможно ли написать, что-то типа
Код: vbnet
1.
If i in(1, 5, 7) Then ...




Спасибо!
...
Рейтинг: 0 / 0
08.05.2019, 11:12
    #39811167
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность переменной к множеству
VistaSV30, как вариант
Код: vbnet
1.
2.
3.
4.
5.
6.
...
Select Case i
    Case 1, 5, 7, 10 to 20'последнее интервал полностью с 10 до 20 включительно
        
End Select
...
...
Рейтинг: 0 / 0
08.05.2019, 11:39
    #39811188
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность переменной к множеству
6400575
В данном примере инструкция Select Case используется для анализа значения переменной. Второе предложение Case содержит значение анализируемой переменной и следовательно выполняется только инструкция, связанная с этим предложением.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim Number
Number = 8	' Инициализирует переменную.
Select Case Number	' Анализирует число.
Case 1 To 5	' Число между 1 и 5.
	Debug.Print "Между 1 и 5"
' Это предложение Case является единственным истинным.
Case 6, 7, 8	' Число между 6 и 8.
	Debug.Print "Между 6 и 8"
Case Is > 8 And Number < 11	' 9 или 10.
Debug.Print "Больше 8"
Case Else	' Другие значения.
	Debug.Print "Вне интервала 1 -- 10"
End Select
...
Рейтинг: 0 / 0
08.05.2019, 12:23
    #39811221
Принадлежность переменной к множеству
VistaSV30Возможно ли написать, что-то типа
Код: vbnet
1.
If i in(1, 5, 7) Then ...

В Аксе можно и так:
Код: vbnet
1.
If EVal(i & " In (1, 5, 7)") Then ...


Удобно, если список вариантов у вас в переменной.
...
Рейтинг: 0 / 0
08.05.2019, 14:54
    #39811351
VistaSV30
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность переменной к множеству
Спасибо всем!
Пока остановлюсь на использовании Case
...
Рейтинг: 0 / 0
08.05.2019, 17:15
    #39811464
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность переменной к множеству
у себя в проекте использую такую функцию
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Function InSetInner(spKey As Variant, apArgs As Variant) As Boolean
 Dim bvIsNull As Boolean
 Dim i As Integer
 
 If IsEmpty(spKey) Then spKey = Null
 bvIsNull = IsNull(spKey)
 InSetInner = True
 For i = LBound(apArgs) To UBound(apArgs)
  If IsArray(apArgs(i)) Then
   If InSetInner(spKey, apArgs(i)) Then Exit Function
  Else
   If apArgs(i) = spKey Or (bvIsNull And (IsNull(apArgs(i)) Or IsEmpty(apArgs(i)))) Then Exit Function
  End If
 Next
 InSetInner = False
End Function

Function InSet(spKey As Variant, ParamArray apArgs() As Variant) As Boolean
 Dim v As Variant
 v = apArgs
 InSet = InSetInner(spKey, v)
End Function



Использовать можно так

Код: vbnet
1.
If InSet(i, 1, 5, 7) Then...



В качестве параметра можно передать массив в том числе и многомерный. В отличии от нормальной тритичной логики в этой функции inSet(Null,Null) выдаст True. Значения Empty рассматриваются как Null.
...
Рейтинг: 0 / 0
09.05.2019, 06:38
    #39811610
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность переменной к множеству
Swa111,

А для чего у вас 2 функции используются?
...
Рейтинг: 0 / 0
12.05.2019, 19:02
    #39812270
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность переменной к множеству
MrShin,

Для унификации работы с массивами
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Принадлежность переменной к множеству / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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