需要更多更的的集合知识(50分)

  • 主题发起人 主题发起人 L.Ming
  • 开始时间 开始时间
L

L.Ming

Unregistered / Unconfirmed
GUEST, unregistred user!
集合知识,基础的,深层的操作,要领的理解,需要注意事项,如果将数组,字符串等(英文或数字)转换为集合,集合转为数组,字符串等知识.
 
你这个集合必须预先定义好其成员,否则不可以做到。因为没有直接方法枚举集合!

TMySet = set of Byte;
--如何将字符中'1,2,3,4,5,6'转为集合?-
--如何将'1 2 3 4 5 6'转为集合?
这两个一样,只是分隔符不一样:
function StrToSet(S: string): TMySet;
var
I: Integer;
begin
with TStringList.Create do
try
Delimiter := ','; // 或者空格' '
DelimitedText := S;
Result := [];
for I := 0 to Count - 1 do
Include(Result, StrToInt(Trim(Strings)));
finally
Free;
end;
end;

--如何将集合[1,3,4,7]转为'1,3,4,7'字符串?-
--如何将集合[1,3,4,7]格式化转为字符串'01,03,04,07'
也是一个意思!!

function SetToStr(S: TMySet): string;
var
I: Integer;
begin
Result := '';
for I := Low(Byte) to High(Byte) do
begin
if I in S then
begin
if Result = '' then
Result := FormatFloat('00', I)
else
Result := Result + ',' + FormatFloat('00', I);
end;
end;
end;
 
TypInfo.pas
有两个函数,自己再弄一下
StringToSet
SetToString
 
StringToSet,SetToString介绍说不能超过32个元素,是这样吗?
还有,他们的参数怎么填写呀?PPropInfo是什么呀?
其实xiammy的代码已经可以达到要求,但是如果有系统函数可用的话,可以减少很多代码,以后检查也更方便了.
 
var
tStr: TStringList;
begin
try
tStr := TStringList.Create;
tStr.Add('1');
tStr.Add('2');
tStr.Add('3');
tStr.Add('4');
tStr.Add('5');
ShowMessage( IntToStr( tStr.Count ) );
ShowMessage(tStr.Text );
ShowMessage(tStr.DelimitedText );

finally
tStr.Free;
end;
end;
 
接受答案了.
 
后退
顶部