字符串集?

Arm*_*min 7 delphi delphi-7

您熟悉此块:

Var
  mySet: Set Of Char;
  C: Char;
begin
  mySet := ['a', 'b', 'c'];
  If C In mySet Then ShowMessage('Exists');
end;
Run Code Online (Sandbox Code Playgroud)

有没有办法申报Set Of STRING?或者是否有类似的代码我可以使用?这个块的重要部分是If C In mySet Then ShowMessage('Exists');我想使用类似于一组字符串的东西.
谢谢.

Rem*_*eau 11

使用位数组实现集合.所以不,你不能拥有一套'字符串'.改为使用TStringList,即:

var 
  mySet: TStringList;
  S: String;
begin 
  S := ...;
  mySet := TStringList.Create;
  try
    mySet.Add('a');
    mySet.Add('b');
    mySet.Add('c'); 
    if mySet.IndexOf(S) <> -1 Then ShowMessage('Exists');
  finally
    mySet.Free;
  end;
end; 
Run Code Online (Sandbox Code Playgroud)

  • 如果你有很多字符串,最好使用排序列表并忽略重复:mySet.Sorted:= True; mySet.Duplicates:= dupIgnores; (3认同)

Fab*_*ujo 8

你可以利用这个.

type 
  TAnyEnum = (aeVal1, aeVal2, aeVal3);
  TEnuns = set of TAnyEnum;
  TAnyMessages: array [TAnyEnum] of String;

const 
  MyMessages: TAnyMessages = ('Exists', 'Something else', 'WTF!?');

var
  MySet : TEnums;
begin
  MySet = [aeVal1, aeVal2];
  If aeVal1 in MySet then ShowMessage(MyMessages[aeVal1]);
end;
Run Code Online (Sandbox Code Playgroud)


Did*_*alé 5

RTL System.StrUtils单元为此提供了一种非常有趣的方法:

function MatchText(const AText: string; const AValues: array of string): Boolean; overload;
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

  if MatchText(sLanguages, ['fr-FR', 'en-GB', 'de-DE', 'it-IT', 'fr-CH', 'es-ES']) then
    Writeln('found')
Run Code Online (Sandbox Code Playgroud)