type
TSet=(a=200,b=201,c=202,d=203,e=204);
TSets=set of TSet;
var
t:TSets;
begin
t :=[c,e,b];
//现在要求如下操作
//1、获取t集合中有几个元素,上例中也就是有三个,如何操作?
//2、如何获取t集合中值是第二大的元素,上例中值是第二大的元素是c,如何操作?
// 也就是说为t集合中所有的元素做个排序,然后取第二大的元素。
end;
...全文
3286打赏收藏
Delphi 中这样的集合操作如何进行?
type TSet=(a=200,b=201,c=202,d=203,e=204); TSets=set of TSet; var t:TSets; begin t :=[c,e,b]; //现在要求如下操作 //1、获取t集合中有几个元素,上例中也就是有三个,如何操作? //2、如何获取t集合中值是第二大的元素,上例中值是第二大的元素是c,如何操作? // 也就是说为t集合中所有的元素做个排序,然后取第二大的元素。 end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
type
TSet = (a = 200, b = 201, c = 202, d = 203, e = 204);
TSets = set of TSet;
var
t: TSets;
i : TSet;
count : Integer;
begin
t := [c, e, b];
Count := 0;
for i := High(TSet) downto Low(TSet) do
begin
if i in t then
begin
Inc(Count);
end;
end;
//Count就是元素个数.
//循环是从Hight到Low.最大,第二大你也该知道怎么获取了吧.
end;
这里我先说通常的方法
第一个:
var
i,num:Integer;
begin
num :=0;
for i :=Integer(a) to Integer(e) do
if TSet(i) in t then Inc(num);
end;
第二个:
var
i,rst:Integer;
begin
rst :=-1;
for i :=Integer(e) downto Integer(a) do
if TSet(i) in t then
begin
Inc(rst);
if rst=1 then break;//第二个出来了
end;
感觉集合操作真麻烦,能简单点吗?