Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2013, 22:47   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Злость Списки TList. Инвертирование списка.

Доброго времени суток!

Как реализовать правильное инвертирование списка?
Есть объекты:
1
2
3

Инвертирование от большего к меньшему:
3
2
1

И наоборот:
1
2
3

Собственно, как это сделать в самом Tlist?
Способ: Создать 2 класс, и в него циклом заворачивать - не предлагать.

Знаю о методе Exchange. Но что-то не работает:
Код:
        ClearLV;
        case fDirection of

          idDown: // От большего к меньшему
            begin
              for i := 0 to Count - 1 do
              begin
                if (i < Count - 1) then
                  Exchange(i, i + 1);
                Update(Items[i]);
              end;
              fDirection := idUp;
            end;
          idUp: // От меньшего к большему
            begin
              for i := Count - 1 downto 0 do
              begin
                if (i > 0) then
                  Exchange(i, i - 1);
                Update(Items[i]);
              end;
              fDirection := idDown;
            end;
        end;
Не работает "// От меньшего к большему", допустим:
5
4
3
2
1
0

Переворачиваются почти:
1
2
3
4
5
0

В чем соль?

Вынес мозг себе и другим на протяжении этого дня.... ткните носом в бревно, которое я не вижу....
Человек_Борща вне форума Ответить с цитированием
Старый 11.05.2013, 23:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как реализовать правильное инвертирование списка?
Для чего? Может достаточно просто пройтись от count-1 downto 0?
Цитата:
Создать 2 класс, и в него циклом заворачивать - не предлагать.
Почему? Чем не катит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 23:15   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
for i:=0 to (Count div 2)-1 do Exchange(i,Count-1-i);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.05.2013, 06:07   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Пересчитывайте индекс да и все.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иерархические списки.Удаление атомарного списка. Sonic58 Общие вопросы C/C++ 1 30.11.2011 13:37
С++ Строки - списки. Удаление элементов списка. Daramos Помощь студентам 0 16.12.2010 09:05
Передача списка указателей (TList) как параметр в dll sneksnek2006 Общие вопросы C/C++ 1 28.10.2010 11:33
Списки. Удаление элемента из списка. thexqn Помощь студентам 0 11.05.2010 09:04
Урезать длину списка TList mutabor Общие вопросы Delphi 4 03.04.2010 12:22