当前位置:主页>仓库管理软件> 列表

求某个集合中元素的个数 找销售软件破解版

仓库管理软件版1楼: 是否有函数可以调用,或者如何实现求这个个数问题呢?

2楼: .count
应该就行了吧. 如管家婆管理软件

3楼: 用两次SizeOf函数,第一次用SizeOf求出集合中第一个元素的大小(内存占用数);第二次用SizeOf求出整个集合的大小(内存占用数);最后用第二次的值 DIV 第一次的值应该就是集合中的元素数目了...

4楼: .count是什么,可行吗?

5楼: 呵呵,不可行,这是得到你的记录数.刚才没看清楚.

6楼: 你是要得到维数.

仓库管理软件版7楼: select conunt(id) form table

8楼: 不是我的集合指的是Pascal中的集合类型,例如[5,6,7,8]

9楼: 啊?你说的是数组啊???????????????????????????

10楼: Object Pascal中有集合类型,我说的不是数组,是集合

11楼: 采用了Johnny_du的方法,真希望系统中有求集合元素个数的函数

12楼: 没有这种函数的。
有个办法,给你个例子:
type
TEnum=(a,b,c,d);//如果你的是子界类型也一样;
TSet=set of TEnum;

const COUNT=4;
...
...
function GetSetCount(ASet:TSet):integer;
var i:integer;
begin
i:=0;
result:=0;
if TEnum(i) in ASet then Result:=Result+1;
end; 如进销存注册码

13楼: 啊哦,错了
type
TEnum=(a,b,c,d);//如果你的是子界类型也一样;
TSet=set of TEnum;

const COUNT=3;
...
...
function GetSetCount(ASet:TSet):integer;
var i:integer;
begin
result:=0;
for i:=0 to COUNT do
if TEnum(i) in ASet then Result:=Result+1;
end;

仓库管理软件版14楼: /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//得到集合变量包含的元素输
//参数1:集合变量的指针
//注释:传递指针是想能够为任何集合类型计算.不必绑死到固定某个集合类型
//参数2:集合类型的大小
//注释:集合在内部是位运算.集合最多256个元素.因此集合是1-32个字节的类型,长度视集合类型的总元素个数而定.所以要给一个集合类型大小
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Function GetSetCount(AnySetPointer:Pointer; const SizeofSet:Integer):Integer;
var
I ,j:Integer;
PB: PByte;
C: Byte;
begin
Result := 0;
PB := AnySetPointer;
for I := 0 to SizeofSet -1 do //对其本身及后的共SizeofSet个字节进行位运算
begin
C := $1;
for J := 0 to $F do //检测位是不是1,1表示包含次元素,0表示不包含
begin
if (C and PB^ = C) then
Inc(Result);
C := C shl 1;
if C = 0 then //移位出头了,就是0
break;
end;
Inc(PB);
end;
end;

用法如下:
type
TSS = set of char;
var
ss:tss;
I: Integer;
begin

SS := [''a''];
ss := SS + [''c''..''k''];
I := GetSetCount(@SS, SizeOf(TSS)); //获取集合变量元素总数
ShowMessage(''ss包含元素数量是:''+IntToStr( I));
end;

15楼: 如果要是求集合类型中全部元素的话就
Szieof(集合类型)*8
就行了.上面说了,集合就是位运算.每个元素占一个位.最多一个字节能表示8个集合元素.
所以乘8

16楼: 考,楼上的,他要的是集合变量的元素个数,不是集合类型的所有元素个数,汗

17楼: 楼上的挺没礼貌啊。


你好好看看。我连发两贴,
第一铁就是得到集合变量中的元素个数。
第二铁是集合类型包含的总个数

18楼: wr960204的方法真是不错
我试了下,还可以再简单点,:)

type
TSets = set of (ssA, ssB, ssC, ssD);

function GetSetCount(const V): Byte;
var
D: Byte;
begin
Result := 0;
D := PByte(@V)^;
while D <> 0 do
begin
if D and 1 = 1 then
Inc(Result);
D := D shr 1;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
V: TSets;
begin
V := [ssA, ssB, ssD];
Caption := IntToStr(GetSetCount(V));
end;

19楼: 我的方法就差了吗!!!!

20楼: hbwin2001的方法倒是没有错。但是你的方法绑死了指定的集合类型。而我的则是通用的

仓库管理软件版21楼: copy_pasteni这样是不行的,因为集合类型的长度是不固定的,最长32字节。你的方式判断一个字节为0后面就都不判断了,会有遗漏。
集合类型的长度等于集合总元素数除8。集合最多256个元素,最长32字节。
例如Ta = set of char;
a:ta;
a := [''a'',''z''];
第一个喝醉hou一个元素中间存在30个0字节。你的方式就判断不了了。所以一定要有长度传进来才行

22楼: 多人接受答案了。 如销售软件破解版