当前位置:  开发笔记 > 运维 > 正文

字符串集?

如何解决《字符串集?》经验,为你挑选了3个好方法。

您熟悉此块:

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

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



1> Remy Lebeau..:

使用位数组实现集合.所以不,你不能拥有一套'字符串'.改为使用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; 


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

2> Fabricio Ara..:

你可以利用这个.

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;



3> 小智..:

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

function MatchText(const AText: string; const AValues: array of string): Boolean; overload;

像这样使用它:

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

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有