Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка строк 
:(
    Опции темы
RDC
  Дата 2.11.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



Здравствуйте!
Как мне отсортировать по алфавиту?
Строки хранятся в TStringList
--------------------
Живопись
PM MAIL   Вверх
aktuba
Дата 2.11.2008, 12:10 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



2 варианта:

1. Использовать Sort
2. Почитать и написать свою сортировку.

P.S.: какой вопрос - такой ответ.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
RDC
Дата 2.11.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



У меня структура строк такая:
1234@Курица@Петров@32
1234@Енот@Петров@12
324@Корова@Сидоров@45

Мне надо сделать сортировку по Животным

Это сообщение отредактировал(а) RDC - 2.11.2008, 12:19
--------------------
Живопись
PM MAIL   Вверх
aktuba
Дата 2.11.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата(RDC @  2.11.2008,  13:18 Найти цитируемый пост)
Мне надо сделать сортировку по Животным

Пиши свою сортировку. Информации по сортировке - море. За основу можно взять быструю сортировку из самого TStringList.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
RDC
Дата 2.11.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



Ну я хотел бы что бы вы меня натолкнули. Алгоритм подсказали.
--------------------
Живопись
PM MAIL   Вверх
mr.Anderson
Дата 2.11.2008, 14:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



RDC, если писать свою сортировку, то лучше взять за основу ту самую "быструю сортировку", самый шустрый из существующих в мире алгоритмов. Почитать и достать код на разных языках можно в вики: http://ru.wikipedia.org/wiki/%D0%91%D1%8B%...%B2%D0%BA%D0%B0 .


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Matematik
Дата 3.11.2008, 12:22 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 7
Всего: 50



Можно использовать метод CustomSort(). Внутри него используется алгоритм быстрой сортировки, а для стравнения строк вызывается пользовательска ф-я MyCustomSort_()

Код

uses StrUtils;

function MyCustomSort_(List: TStringList; Index1, Index2: Integer): Integer;
var
  p : Integer;
  z1,z2 : AnsiString;

  function Cut_(const AStr:AnsiString):AnsiString;
  var p1,p2:Integer;
  begin
    p1 := StrUtils.PosEx('@', AStr, 1);
    p2 := StrUtils.PosEx('@', AStr, p1+1);
    Result := Copy(AStr, p1+1, p2-p1);
  end;

begin
  //----------------------------------
  //  0 - List[Index1] = List[Index2]
  //  1 - List[Index1] > List[Index2]
  // -1 - List[Index1] < List[Index2]
  //----------------------------------
  z1 := Cut_(List[Index1]);
  z2 := Cut_(List[Index2]);
  if z1>z2 then
    Result := 1
  else if z1<z2 then
    Result := -1
  else
    Result := 0
end;

procedure TForm1.Button1Click(Sender: TObject);
var sl:TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Add('1234@Курица@Петров@32');
    sl.Add('366@Утка@Петя@55');
    sl.Add('1234@Енот@Петров@12');
    sl.Add('324@Корова@Сидоров@45');
    ShowMessage(sl.Text);
    sl.CustomSort(MyCustomSort_);
    ShowMessage(sl.Text);
  finally
    sl.Free
  end;

end;



PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.