从TStringList中删除重复项

Jee*_*eva 11 delphi tstringlist

我正在解析数据集并为TStringList我想要避免重复项分配值.我使用以下代码但仍插入重复项.

  channelList := TStringList.Create;
  channelList.Duplicates := dupIgnore;
  try
    dataset.First;
    while not dataset.EOF do
    begin
        channelList.Add(dataset.FieldByName('CHANNEL_INT').AsString)  ;
        dataset.Next;
    end;
Run Code Online (Sandbox Code Playgroud)

为什么要添加重复项?

Ari*_*The 25

你确实读过http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TStringList.Duplicates,不是吗?

然后你错过了那里最重复的一句话 - "排序"

channelList.Sorted := true
Run Code Online (Sandbox Code Playgroud)
var F: TField;

channelList := TStringList.Create;
channelList.Sorted := True;
channelList.Duplicates := dupIgnore;

try
   dataset.First;
   F := dataset.FieldByName('CHANNEL_INT');
   while not dataset.EOF do
   begin
      channelList.Add(F.AsString);
      dataset.Next;
   end;
Run Code Online (Sandbox Code Playgroud)

  • +1 的答案,即使是用户也不知道/关心可扩展性 :) (2认同)
  • @Arioch'The:哦,对不起,我是 Delphi 新手,我的 2k+ 是 c++ (2认同)

who*_*ddy 8

开箱即用,避免前面的重复?

我不知道你使用的是什么数据库但是例如在SQL服务器上它只是查询的问题:

'SELECT DISTINCT CHANNEL_INT FROM MYTABLE';
Run Code Online (Sandbox Code Playgroud)

然后你可以将结果添加到你的,TStringList而不用担心重复.

  • 我同意这不是他的问题的答案,所以Arioch值得接受...... (3认同)
  • 为什么要获取许多结果并在客户端过滤掉它们.如果在应用程序的任何其他位置忽略这些过滤的记录,则无需获取它们,这是最正确的答案.[1] (2认同)