在字符串列表中搜索值,避免此循环,短代码版本

时间:2014-01-14 07:22:02

标签: delphi

我可以做得更好:在字符串列表中搜索某个值???

function searchstringlist (MyStringList : TStringList; MyValue : String) : Boolean;
var   i : Integer; 
begin
     result := false; // added to prevent compiler warning
     for i:= 0 to  MyStringList.Count-1 do
       begin

       if pos ( MyValue, MyStringList[i] ) > 0 then 
              begin
               result := true;
               exit;
              end;
       end;
end;

1 个答案:

答案 0 :(得分:1)

只需检查该值是否在TStrings.Text

您应该使用抽象TStrings,字符串参数应为const

你应该正确地命名这个功能,让别人知道,你在里面做什么

function ContainsStr(const AStrings : TStrings; const ASearchStr : String) : Boolean;
var
  LIdx : Integer;
begin
  Result := Pos( ASearchStr, AStrings.Text ) > 0;
  if Result then
  begin
    for LIdx := 0 to AStrings.Count - 1 do
      if Pos( ASearchStr, AStrings[LIdx] ) > 0 then
        Exit;
    Result := False;
  end;
end;

您(当然还有我的)功能就像这样

var
  LStrings : TStrings;
begin
  LStrings := TStringList.Create;

  LStrings.Add( 'foo' );
  LStrings.Add( 'bar' );

  ContainsStr( LStrings, 'foo' ); // True
  ContainsStr( LStrings, 'bar' ); // True
  ContainsStr( LStrings, 'foo'#13#10'bar' ); // FALSE

  // but also

  ContainsStr( LStrings, 'oo' ); // True
  ContainsStr( LStrings, 'o' ); // True
  ContainsStr( LStrings, 'ar' ); // True

如果您只想查找'foo''bar',则只需

function ContainsStr( const AStrings : TStrings; const ASearchStr : string ) : Boolean;
begin
  Result := AStrings.IndexOf( ASearchStr ) >= 0;
end;