Форум: "Основная";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
ВнизМножества Найти похожие ветки
← →
SPeller (2002-05-23 11:58) [0]Здравствуйте! У меня возник такой вопрос: можно ли сделать множество, содержащее элементы типа Longint aka Integer? Обычным способом типа:
Handles:set of longint;
не прокатывает, говорит что надо до 256 элементов. Мне надо максимум, чтобы штук 50 элементов было во множестве. Можно ли это сделать, да ещё и чтобы проверять на наличие во множестве было проще чем перебирать эл-ты массива, иначе вопрос отпадёт сам собой?
← →
Внук (2002-05-23 12:07) [1]Дело не в количестве. Множества могут базироваться только на том типе, значения функции Ord от элементов которого лежит между 0 и 255 (включительно).
← →
Ally (2002-05-23 12:08) [2]Лучше сделать так:
...
type THandlesSet = set of Byte; {или = set of 1..51}
var HandlesSet: THandlesSet;
begin
...
HandlesSet := [Handle, Button1.Handle, Edit1.Handle]
...
end;
...
Конструкцияset of 1..51
подразумевает, из какого количества элементов - of values of the same ordinal type - состоит набор.
← →
Ally (2002-05-23 12:11) [3]В дополнение из хелпа про чтобы проверять на наличие во множестве:
The in operator tests set membership:
if "a" in MySet then ... { do something }
;
Every set type can hold the empty set, denoted by [].
← →
Кулюкин Олег (2002-05-23 12:50) [4]2 SPeller © (23.05.02 11:58)
Может лучше хранить их в списке (TList)?
← →
PVOzerski (2002-05-23 13:15) [5]2Ally © (23.05.02 12:08):
Так делать нельзя. Элемент множества set должен быть в диапазоне 0..255.
Если элементов может быть штук 50, то наилучший выход (хотя и не всегда
пригодный для конкретной задачи) - привязать к каждому возможному значению
некий ID в допустимом для set диапазоне b c этим ID работать. А один раз я
ухитрился "почти" упаковать в set"ы тип smallint, но довольно хитрым образом:
сделал set of byte и аrray[0..255]of set of byte. При проверке вхождения элемента
в этот квази-set я проверял вхождение младшего байта в 1-й set, а старшего - в
set-элемент массива с индексом, равным младшему байту. Понятно, что такой
подход к 32-разрядным элементам приведет к возникновению очень громоздких
конструкций.
← →
SPeller (2002-05-23 13:17) [6]2Ally © (23.05.02 12:11)
Да что вы говорите?? :-)))
2Кулюкин Олег © (23.05.02 12:50)
Нет. Это для хука, я проверяю, есть ли обрабатываемый хэндл среди тех, которые мне нужны.
← →
Кулюкин Олег (2002-05-23 14:14) [7]2 SPeller © (23.05.02 13:17)
MyList.IndexOf(Pointer(MyHandle)) - проверка, есть ли обрабатываемый хэндл среди тех, которые нужны.
← →
erik (2002-05-23 14:18) [8]Тоды делай Array of Handle, а после поиск элемента. А множества это совсем другое MyType = (myHandle1, myHandle2, ...myHandleX) до 256. Но тебе это ненужно.
← →
SPeller (2002-05-23 15:59) [9]Ну ладно, всем спасибо за советы...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c