TFPGObjectList<T>.Sort или как сортировать список?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

TFPGObjectList<T>.Sort или как сортировать список?

Сообщение resident »

Здравствуйте!
Не сортирует список.
В исходниках шаблон функции сортировки:

Код: Выделить всё

    type
      TCompareFunc = function(const Item1, Item2: T): Integer;

Вроде делаю по шаблону (см. последнюю строку):

Код: Выделить всё

type
  TMyNode = class;
  TMyNodeList = specialize TFPGObjectList<TMyNode>;

  { TMyNode }

  TMyNode = class
    private
      fPath: string;
      fName: string;
    public
      property Path: string read fPath write fPath;
      property Name: string read fName write fName;

      constructor Create;
      destructor Destroy;
    end;

  function CompareMyNodes(const Item1, Item2: TMyNode): Integer; 


Но при попытке использовать:

Код: Выделить всё

MyNodeList.Sort(CompareMyNodes);


Выдает ошибку
ufxml.pas(71,21) Error: Wrong number of parameters specified for call to "CompareMyNodes"


Чего-то в сети не нашел примеров про этот метод (Sort). Может подскажете, как его использовать?

Добавлено спустя 20 минут 9 секунд:
Кхе, забыл про @, теперь компилируется, но вылетает с ошибкой Access Violation.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

resident писал(а):но вылетает с ошибкой Access Violation.


видимо, считаешь с 1, а список идет с 0.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Да не, метод же лазарусовцы писали. Моя только функция сравнения.
Там оказалось, что значениями функции могут быть только -1, 0, 1.
Вроде работает.

Добавлено спустя 52 секунды:
Подсмотрел здесь:
http://francois-piette.blogspot.ru/2013 ... chive.html
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

понятно... троичная логика...
Ответить