Показать сообщение отдельно
  #5  
Старый 29.01.2014, 11:03
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от royun
Если вдруг кому-то поможет. Вот решение:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  TS : TStringList;
  i, indexS  : integer;
begin
  TS := TStringList.Create;
Здесь ещё желательно сделать список сортированным:
Код:
TS.Sorted := True;
В сортированном списке поиск будет происходить значительно быстрее, особенно для больших списков.
Цитата:
Сообщение от royun
Код:
     else {такое значение уже было ранее, увеличим счётчик на 1}
       TS.Objects[indexS] := TObject(Integer(TS.Objects[indexS])+1);
С такими преобразованиями следует быть поосторожнее - здесь нужно помнить, что в 64-битных приложениях указатели стали 8-байтными, а тип Integer почему-то так и остался 4-байтным (как и был в 32-битных приложениях). И кроме того в последних версиях Delphi идёт тенденция к отказу от указателей, и такое скорее всего даже и не откомпилируется.
Цитата:
Сообщение от royun
Код:
  for I := 0 to TS.Count - 1 do begin
    StringGrid2.Cells[0,i+1] := IntToStr(i+1);
    StringGrid2.Cells[1,i+1] := TS.Strings[i];
    StringGrid2.Cells[2,i+1] := IntToStr( Integer(TS.Objects[i]));
  end;
Странно. Вроде в исходном задании нужно было отбирать уникальные значения по двум колонкам, а здесь отбирается только по одной. Так что это решение неполное.
Ответить с цитированием