加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi helper类,删除空字符串

发布时间:2020-12-15 09:42:47 所属栏目:大数据 来源:网络整理
导读:在之前的( remove empty strings from list)问题中,我询问了从字符串列表中删除空字符串的问题 ....// Clear out the items that are emptyfor I := mylist.count - 1 downto 0 dobegin if Trim(mylist[I]) = '' then mylist.Delete(I);end;.... 从代码设计
在之前的( remove empty strings from list)问题中,我询问了从字符串列表中删除空字符串的问题

....
// Clear out the items that are empty
for I := mylist.count - 1 downto 0 do
begin
  if Trim(mylist[I]) = '' then
    mylist.Delete(I);
end;
....

从代码设计和重用的角度来看,我现在更喜欢一个更灵活的解决方案:

MyExtendedStringlist = Class(TStringlist)

 procedure RemoveEmptyStrings;

 end;

问:在这种情况下我可以使用类助手吗?与上面设计一个新课程相比,这会是什么样子?

解决方法

这里有一个好帮手.为了使其更广泛适用,您应该选择将帮助程序与帮助程序可以应用的派生类最少的类相关联.在这种情况下,这意味着TStrings.

派生新类的巨大优势在于,您的辅助方法可用于不是由您创建的TStrings实例.明显的例子包括暴露备忘录,列表框等内容的TStrings属性.

我个人会编写一个帮助程序,使用谓词提供更一般的删除功能.例如:

type
  TStringsHelper = class helper for TStrings
  public
    procedure RemoveIf(const Predicate: TPredicate<string>);
    procedure RemoveEmptyStrings;
  end;

procedure TStringsHelper.RemoveIf(const Predicate: TPredicate<string>);
var
  Index: Integer;
begin
  for Index := Count-1 downto 0 do
    if Predicate(Self[Index]) then
      Delete(Index);
end;

procedure TStringsHelper.RemoveEmptyStrings;
begin
  RemoveIf(
    function(Item: string): Boolean
    begin
      Result := Item.IsEmpty;
    end;
  );
end;

更一般地说,TStrings是一个很好的候选人.它缺少相当多的有用功能.我的助手包括:

> AddFmt方法,可以一次性格式化和添加.
> AddStrings方法,在一次调用中添加多个项目.
>一个包含IndexOf(…)<> -1的Contains方法,并为未来的代码读者提供了一种语义更有意义的方法.
>一个类型为NativeInt的Data []属性,以及包装Objects []属性的匹配AddData方法.这隐藏了TObject和NativeInt之间的强制转换.

我确信可以添加更多有用的功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读