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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2010, 15:58   #1
gamer123
Пользователь
 
Регистрация: 19.01.2008
Сообщений: 92
По умолчанию Перемешивание строк

как организовать рандомное перемешивание строк в мемо?
gamer123 вне форума Ответить с цитированием
Старый 25.08.2010, 16:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
with memo1 do
 for i:=0 to Lines.Count-1 do begin
  Lines.Exchange(Random(Lines.Count),Random(Lines.Count));
 end;
Подойдет?
P.S. Не проверял...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2010, 16:11   #3
gamer123
Пользователь
 
Регистрация: 19.01.2008
Сообщений: 92
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
with memo1 do
 for i:=0 to Lines.Count-1 do begin
  Lines.Exchange(Random(Lines.Count),Random(Lines.Count));
 end;
Подойдет?
P.S. Не проверял...
если работает - то подойдет) ща проверю
gamer123 вне форума Ответить с цитированием
Старый 25.08.2010, 18:04   #4
gamer123
Пользователь
 
Регистрация: 19.01.2008
Сообщений: 92
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
with memo1 do
 for i:=0 to Lines.Count-1 do begin
  Lines.Exchange(Random(Lines.Count),Random(Lines.Count));
 end;
Подойдет?
P.S. Не проверял...
Все работает как надо, только очень очень долго. Список 10 000 строк перемешивался минут 10 (в программе KeyWordKeeper перемешивание этого списка идет 2-3 секунды). Можно как нибуть ускорить это?
gamer123 вне форума Ответить с цитированием
Старый 25.08.2010, 18:14   #5
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

попробуй сделать так:
Код:
memo1.DoubleBuffered:=True;
memo1.Lines.BeginUpdate;
with memo1 do
 for i:=0 to Lines.Count-1 do
 begin
  Lines.Exchange(Random(Lines.Count),Random(Lines.Count));
 end;
memo1.Lines.EndUpdate;
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 25.08.2010, 18:27   #6
gamer123
Пользователь
 
Регистрация: 19.01.2008
Сообщений: 92
По умолчанию

Цитата:
Сообщение от DIgorevich Посмотреть сообщение
попробуй сделать так:
Код:
memo1.DoubleBuffered:=True;
memo1.Lines.BeginUpdate;
with memo1 do
 for i:=0 to Lines.Count-1 do
 begin
  Lines.Exchange(Random(Lines.Count),Random(Lines.Count));
 end;
memo1.Lines.EndUpdate;
Тоже самое, полдня идет. Еслиб на вмваре - то яб не удивился, а тут на простом компе так, это ппц...
gamer123 вне форума Ответить с цитированием
Старый 25.08.2010, 18:32   #7
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Значит избавляемся от лишних расчетов... Попробуй так:
Код:
var
  x,i:Integer;
begin
  memo1.DoubleBuffered:=True;
  memo1.Lines.BeginUpdate;
  x:=memo1.Lines.Count;
  with memo1 do
    for i:=0 to x-1 do
      begin
        Lines.Exchange(Random(x),Random(x));
      end;
  memo1.Lines.EndUpdate;
end;
Скорость должна увеличиться, но не на много.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 25.08.2010, 18:40   #8
gamer123
Пользователь
 
Регистрация: 19.01.2008
Сообщений: 92
По умолчанию

Цитата:
Сообщение от DIgorevich Посмотреть сообщение
Значит избавляемся от лишних расчетов... Попробуй так:
Код:
var
  x,i:Integer;
begin
  memo1.DoubleBuffered:=True;
  memo1.Lines.BeginUpdate;
  x:=memo1.Lines.Count;
  with memo1 do
    for i:=0 to x-1 do
      begin
        Lines.Exchange(Random(x),Random(x));
      end;
  memo1.Lines.EndUpdate;
end;
Скорость должна увеличиться, но не на много.
Стало быстрей, но не существенно. Будет генерица 8-9 минут вместо 10. Может есть другие варианты реализации данной функции?
gamer123 вне форума Ответить с цитированием
Старый 25.08.2010, 18:42   #9
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Собственно, можешь посмотреть саму функцию Exchange и адаптировать под себя. Хотя сомневаюсь, что быстрее станет. У KeyWordKeeper'a, возможно, другие методы работы со строками. Да и язык другой.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 25.08.2010, 18:57   #10
gamer123
Пользователь
 
Регистрация: 19.01.2008
Сообщений: 92
По умолчанию

Цитата:
Сообщение от gamer123 Посмотреть сообщение
Тоже самое, полдня идет. Еслиб на вмваре - то яб не удивился, а тут на простом компе так, это ппц...
чето из цикла выходиь не хочет. Дождался наконец окончания оно в мемо показывает что поменяло и стоит на 1м месте

сорь, вышло из цикла. прогресс бар дошел до 100, постояло еще минут 15 и вышло. мда..

Последний раз редактировалось gamer123; 25.08.2010 в 19:00.
gamer123 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление строк в таблицу с вставкой в них текста и чередованием фона строк Centurion2xx6 Microsoft Office Word 9 30.03.2010 11:00
Матрица A состоит из 8 строк и 6 столбцов. вычесть из всех её строк, начиная со второй, первую строку Dimak24 Помощь студентам 1 19.12.2008 15:45
Перемешивание строк Черничный БД в Delphi 3 15.07.2008 14:11
Перемешивание с внутренними цепочками igrok85_85 Помощь студентам 1 02.05.2008 18:20
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14