首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-03-01 
合并字符串的一个函数(如何优化)functionMergeStrings(consts:arrayofstringconstDelimiter:string, Me

合并字符串的一个函数(如何优化)
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;

热点排行