集合的定义和调用?(50分)

Z

ZeroMan

Unregistered / Unconfirmed
GUEST, unregistred user!
准备定义这样一个包含如下内容的集合 (24510,24516,24806,25008)
弄了半天就是定义不好,第一次用集合,请各位给个详细点的说明,谢谢……
 
定义:
Tabc=(24510,24516,24806,25008)
Tcd= set of Tabc
调用:
var
s: Tcd;
begin
s :=24510;
end;
 
矫正一下:
S:=[24510];
 
不知道错在那里???
type
TMySet=(24510,24516,24806,25008);
MySet= set of TMySet;
......
var
xxx:MySet;
begin
........
end;

错误提示:Identifier expected but number found
光标停在:TMySet=(24510 后面

当 TMySet=('24510','24516','24806','25008');
这样写的时候

错误提示:Identifier expected but string constant found
光标停在:TMySet=(24510 后面
 
用方括號[],不是圓括號()
 
[]我也试了!结果是一样的?!
我确实是不知道怎么就定义不好这东西

那位 帮做个实例最好!!先谢谢……

king_203@163.com 最好是D6
 
問題在枚舉類型上。它的元素必須是標識符。
type
TMySet=(a=24510,b=24516,c=24806,d=25008);
MySet= set of TMySet;
......
var
xxx:MySet;
begin
........
end;

 
type
Tnum=24510..25008;
Tset=set of Tnum;
var
myset:Tset;
begin
myset=myset+[24510,24516,24806,25008];
...

end;
 
http://sourceforge.net/projects/decal
http://sourceforge.net/projects/dclx
是delphi的两个delphi容器算法库,仿照cpp的大名鼎鼎的stl设计。
我用国dcl。
你想要一个可以排序的set吗??
dcl的map可以满足你的要求(IStrIntfMap)string到int的map


容器算法库是语言的重要组成部分,pascal本身的set是简单的(几乎没有用),cpp的stl是经典,java有collection library,c#有集合库。
delphi太强调rad了,delphi自己带的容器算法库做的是一塌糊涂(相比于delphi领先的rad),广泛运用的只有可怜兮兮的list
弹性也不好,用起来麻烦。。

看stl和数据结构的书,用会一个容器库(不用管实现),选择适用的容器满足实际需求(而不是相反),每次从轮子做起是很郁闷的事情。

最后:祝delphi早点over。。。。
 
to ZeroMan
type
TMySet=(_24510,_24516,_24806,_25008);
MySet=set of TMySet;
var
my1:MySet;
my2:TMySet;
begin
my1:=[_24510,_24516,_24806,_25008];
my2:=_24510;
if my2 in my1 then
begin
....
....
end;
end;
 
集合不直接支持字符串, 及大于是256的Integer
所以不能直接把(24510,24516,24806,25008)做到集合.
解决办法:
1: 用数组的方法.
  2: 用楼上的变通方法加个'_'让整型变成标识符.
 
逼的我没办法,我写了一个函数:
Function SwzFind(Const tmpStr:String):boolean;
var
MyList: TStringList;
begin
MyList := TStringList.Create;
Result:=False;
try
MyList.Add('24510');
MyList.Add('24516');
MyList.Add('24806');
MyList.Add('25008');
if MyList.IndexOf(tmpStr)<>-1 then
Result:=true;
finally
MyList.Free;
end;
end;

但是总觉得不是那么回事!
 
谢谢各位支招!
 
多人接受答案了。
 
顶部