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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2015, 09:16   #1
chiko666111
 
Регистрация: 02.08.2015
Сообщений: 5
По умолчанию Перемешать строки в Listbox

Нужен код, процедура или функция для перемешивания строк в Listbox. То есть этакий рандом. Без повторов строк.
chiko666111 вне форума Ответить с цитированием
Старый 08.09.2015, 09:37   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Примерно в таком духе если уже заполнен
Код:
  for i:=1 to ListBox.Items.Count do ListBox.Items.Move(0,Random(ListBox.Items.Count));
С повторами строк как нибудь сам на этапе заполнения. К перемешиванию это не имеет отношения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.09.2015, 10:03   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Вот ещё вариант:
Код:
procedure StringsShuffle(Lines: TStrings; ExchangeCount: DWORD);
begin
  Lines.BeginUpdate();
  try
    while ExchangeCount <> 0 do
      begin
        Lines.Exchange(Random(Lines.Count), Random(Lines.Count));
        Dec(ExchangeCount);
      end;
  finally
    Lines.EndUpdate();
  end;
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.09.2015, 10:09   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

добавлю.

тут на форуме это обсуждалось.

позволю себе процитировать себя же:
Цитата:
по поводу "тасования" карт:
но мне для решения таких задач ГОРАЗДО больше нравится вариант с перемешиванием. ( можно тут посмотреть) - он очень быст, прост и не требует наличия и манипулирования динамическими массивами!
Единственное, если подходить к вопросу серьёзно, необходимо учитывать, что распределение получается неравномерным. смотри пост №11 (с) kogemrka или, статью, на которую он ссылается:
http://mazanu.com/2008/11/blog-post_20.html
Цитата:
Как не надо тасовать карты
если кратно, то алгоритм перемешивания (с нормальным распределением) должен быть такой:
Цитата:
Для (i от 1 до n-1)
Переставить i-ю карту со случайной картой от i-й до n-й
ну посмотрите реализацию - ТУТ


ссылка на статью в цитате мертва.
поэтому вот оригинальная статья: How We Learned to Cheat at Online Poker: A Study in Software Security
частичный перевод статьи: Как не надо тасовать карты

Последний раз редактировалось Serge_Bliznykov; 08.09.2015 в 10:16.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемешать базу данных ... s88s SQL, базы данных 3 28.02.2014 16:12
Делфи, перемешать строки stringgrid Tony. Помощь студентам 2 19.06.2012 14:19
tstringlist - перемешать строчки paravoz1k Общие вопросы Delphi 5 18.08.2011 00:11
перемешать listbox nevru1bphp Общие вопросы Delphi 2 15.10.2010 09:20
Как быстро перемешать строки? zver777 Общие вопросы Delphi 5 23.08.2009 20:50