Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перемешать ListBox без повторов [D5, XP]


Страницы:   1 2

djkondakov ©   (2009-03-19 15:26:00) 

Доброго времени суток! Подскажите, как можно с помощью Random'а перемешать строки в ListBox'e так, чтобы они не повторялись? Я над этим уже 3 дня бьюсь...


Palladin   (2009-03-20 21:38:00) [1]

ах как мне стыдно как мне стыдно :)


12   (2009-03-20 21:15:00) [2]


> двух строках написали то, что у меня было в 19 (!),
> >  да еще и не работало!

pishu skolko ugodno nerabotaushih strok.
za simvolicheskuu platu mogu i randomno ^)


Тын-Дын   (2009-03-20 20:40:00) [3]

Удалено модератором


Palladin   (2009-03-20 03:07:00) [4]


> Германн ©   (20.03.09 01:35) [24]

http://www.google.ru/search?hl=ru&q=%D0%BD%D0%B5+%D0%BA%D0%BE%D1%80%D0%BC%D0%B8%D1%82%D0%B5+%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D0%B9&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=o&oq=


KilkennyCat   (2009-03-20 02:09:00) [5]


> Вы в двух строках написали то, что у меня было в 19 (!),
>  да еще и не работало!


:) Это можно просто цитировать....


Германн   (2009-03-20 01:35:00) [6]

Удалено модератором


Тын-Дын   (2009-03-20 01:30:00) [7]

Удалено модератором


Cobalt   (2009-03-20 01:11:00) [8]


> djkondakov   (19.03.09 15:26)  


Может, тебе надо вот это:
Duplicates property (TStringList)
Set Duplicates to specify what should happen when an attempt is made to add a duplicate string to a sorted list. The CaseSensitive property controls whether two strings are considered duplicates if they are identical except for differences in case.

The value of Duplicates should be one of the following.

Value Meaning

dupIgnore Ignore attempts to add duplicate strings to the list.
dupError raise an EStringListError exception when an attempt is made to add duplicate strings to the sorted list.
dupAccept Permit duplicate strings in the sorted list.

Set Duplicates before adding any strings to the list. Setting Duplicates to dupIgnore or dupError does nothing about duplicate strings that are already in the list.

Note: Duplicates does nothing if the list is not sorted.


djkondakov   (2009-03-19 17:12:00) [9]

Да нет, просто параллельно с сидением в Инете пытаюсь разобраться сам...
Сергей М., спасибо огромное, все работает... Вы в двух строках написали то, что у меня было в 19 (!), да еще и не работало!


Сергей М.   (2009-03-19 17:09:00) [10]


> Palladin ©   (19.03.09 17:05) [19]
>
>


Судя по заторможенной реакции на ответы, бедняга вполне мог мучаться и неделю. Так что ему еще повезло)


Palladin   (2009-03-19 17:05:00) [11]


> djkondakov   (19.03.09 17:03) [18]

ну да, потому ниже находится исправленный вариант


djkondakov   (2009-03-19 17:03:00) [12]

>for i := 0 to OldListBox.Count - 1 do
>NewListBox.Items.Insert(Random(NewListBox.Count+1), OldListBox.Items[0])

А с этими "двумя строчками" получается не перемешивание, а тупо копирование!


Сергей М.   (2009-03-19 17:02:00) [13]


> djkondakov   (19.03.09 16:59) [14]


стринглист третий тут нафих не нужен, достаточно двух - один в Items листбокса-источника, другой в Items листбокса-приемника.

И Find тут тоже как корове седло


Palladin   (2009-03-19 17:00:00) [14]

и взаправду бедняжка :)


Сергей М.   (2009-03-19 16:59:00) [15]


> Anatoly Podgoretsky ©   (19.03.09 16:54) [13]


Дык тут по ходу выясняется, что ему, оказывается, результат перемешивания нужно поиметь не в том же листе, а в другом , см. [9]

Если в том же, то да, Exchange вполне бы подошел


djkondakov   (2009-03-19 16:59:00) [16]

Попробовал не быть марсианином - сделал пошаговую отладку. Проблема заключается в стандартной для TStringList функции Find. Я заношу в список TStringList значения Рэндома, которые не повторялись, а при генерации нового значения ищу с помощью Find по этому списку, было такое, или нет. Так вот, Find поначалу работает нормально, а потом перестает возвращать true, хотя правильно возвращает номер найденноо значения.


Anatoly Podgoretsky   (2009-03-19 16:54:00) [17]

> Сергей М.  (19.03.2009 16:44:11)  [11]

Все это лишнее при наличии метода Exchange


Сергей М.   (2009-03-19 16:45:00) [18]

Точнее
for i := 0 to OldListBox.Count - 1 do
NewListBox.Items.Insert(Random(NewListBox.Count+1), OldListBox.Items[ i])


Сергей М.   (2009-03-19 16:44:00) [19]


> 3 дня бьюсь


Над этими

for i := 0 to OldListBox.Count - 1 do
 NewListBox.Items.Insert(Random(NewListBox.Count+1), OldListBox.Items[0])

2-мя строчками ?

Бедняга)


Медвежонок Пятачок   (2009-03-19 16:35:00) [20]

.... а отладчик и отладка приложений придуманы для марсиан


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо