Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.06;
Скачать: CL | DM;

Вниз

Множества   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
1-17883
Eugie
2002-05-27 09:58
2002.06.06
Хинты для Main Menu


4-18204
elefant
2002-04-01 14:20
2002.06.06
Мастера ПОМОГИТЕ!!!


1-18015
antistatic
2002-05-22 15:50
2002.06.06
ClientWidth формы, но не по-дефолту..


1-17938
ed_209
2002-05-28 02:43
2002.06.06
FileStream progress


1-17953
Alexandr__
2002-05-28 11:39
2002.06.06
как извлечь кубический корень