读书人

合并字符串的一个函数(怎么优化)

发布时间: 2012-03-01 10:25:47 作者: rapoo

合并字符串的一个函数(如何优化)
function MergeStrings(const s: array of string; const Delimiter: string = ', '; MergeNullStr: Boolean = False): string;
var
i, iPos: Integer;
stemp: string;
begin
Result := ' ';
for i := Low(s) to High(s) do
begin
stemp := s[i];
if MergeNullStr then
begin
if Trim(stemp) = ' ' then stemp := ' ';
Result := Result + Delimiter + stemp;
end
else
begin
if Trim(stemp) <> ' ' then Result := Result + Delimiter + stemp;
end;
end;
iPos := Pos(Delimiter, Result);
iPos := iPos + Length(Delimiter);
Result := copy(Result, iPos, MaxInt);
end;
此函数功能为合并字符串功能:
如数组s=[ '1 ', '2 ', '3 ']分隔符为and,结果为:1and2and3
如数组s=[ ' ', '2 ', '3 '] 分隔符为and,结果为:2and3
如数组s=[ ' ', '2 ', '3 '] 分隔符为and,MergeNullStr=True时,结果为and2and3
如数组s=[ ' ', '2 ', '3 '] 分隔符为and,MergeNullStr=True时,结果为and2and3

以上函数为本人自己写的,但总觉得不够精辟,很不满意,请高人修改一下

[解决办法]
1. 把位于循环体中的判断 if MergeNullStr then 移到循环外面
2. 避免使用最后的copy函数

function MergeStrings(const s: array of string; const Delimiter: string = ', '; MergeNullStr: Boolean = False): string;
var
iLoop : Integer;
sTemp : string;
begin
Result := ' ';
if Low(s) <= High(s) then
begin
Result := Trim(s[Low(s)]);
if MergeNullStr then
begin
for iLoop := Low(s) + 1 to High(s) do
Result := Result + Delimiter + Trim(s[iLoop]);
end
else begin
for iLoop := Low(s) + 1 to High(s) do
begin
sTemp := Trim(s[iLoop]);
if sTemp <> ' ' then Result := Result + Delimiter + sTemp;
end;
end;
end;
end;

[解决办法]
function MergeStrings(const s: array of string; const Delimiter: string = ', ';
MergeNullStr: Boolean = False): string;
var
i: Integer;
begin
Result := ' ';
for i := Low(s) to High(s) do
if MergeNullStr or (Trim(s[i]) <> ' ') then
Result := Result + Delimiter + Trim(s[i]);
Result := StringReplace(Result, Delimiter, ' ', []);
end;

读书人网 >.NET

热点推荐