Форум: "Начинающим";
Текущий архив: 2009.05.03;
Скачать: [xml.tar.bz2];
ВнизПеремешать ListBox без повторов Найти похожие ветки
← →
djkondakov (2009-03-19 15:26) [0]Доброго времени суток! Подскажите, как можно с помощью Random"а перемешать строки в ListBox"e так, чтобы они не повторялись? Я над этим уже 3 дня бьюсь...
← →
Palladin © (2009-03-19 15:36) [1]бедняжка... без каких повторов то?
← →
SergeyIT © (2009-03-19 15:39) [2]А заполнить, то есть перенести, из другого листа случайно. Большой список-то.
← →
Сергей М. © (2009-03-19 15:50) [3]
> перемешать .. чтобы .. не повторялись
Если в колоде 8 тузов, то хоть как перемешивай - все равно их будет 8
← →
Сергей М. © (2009-03-19 15:52) [4]8 это я загнул.
5-ти достаточно чтобы продуться в пух и прах)
← →
Palladin © (2009-03-19 15:53) [5]Телепатор мне подсказывает, что персонаж не может третий день прочитать справку и узнать про Randomize.
← →
SergeyIT © (2009-03-19 15:57) [6]А можно каждой строке прописать случайное число, определить свою функцию Sort и отсортировать.
← →
Медвежонок Пятачок © (2009-03-19 15:58) [7]как можно с помощью Random"а перемешать
С помошью рандома ничего перемешать не выйдет.
Он ничего не перемешивает.
← →
Anatoly Podgoretsky © (2009-03-19 16:15) [8]За три дня можно написать программу или две, а не то что перемешать.
← →
djkondakov (2009-03-19 16:33) [9]У меня при использовании Random"a некоторые строки записываются несколько раз, а некоторые не попадают в список совсем. Получается типа того:
Было
1
2
3
4
5
6
7
8
Стало
5
7
4
5
5
3
2
6
А идея в том, чтобы в цикле строки со случайно сгенерированными индексоми копировать из исходного списка в новый.
← →
Медвежонок Пятачок © (2009-03-19 16:35) [10].... а отладчик и отладка приложений придуманы для марсиан
← →
Сергей М. © (2009-03-19 16:44) [11]
> 3 дня бьюсь
Над этими
for i := 0 to OldListBox.Count - 1 do
NewListBox.Items.Insert(Random(NewListBox.Count+1), OldListBox.Items[0])
2-мя строчками ?
Бедняга)
← →
Сергей М. © (2009-03-19 16:45) [12]Точнее
for i := 0 to OldListBox.Count - 1 do
NewListBox.Items.Insert(Random(NewListBox.Count+1), OldListBox.Items[i])
← →
Anatoly Podgoretsky © (2009-03-19 16:54) [13]> Сергей М. (19.03.2009 16:44:11) [11]
Все это лишнее при наличии метода Exchange
← →
djkondakov (2009-03-19 16:59) [14]Попробовал не быть марсианином - сделал пошаговую отладку. Проблема заключается в стандартной для TStringList функции Find. Я заношу в список TStringList значения Рэндома, которые не повторялись, а при генерации нового значения ищу с помощью Find по этому списку, было такое, или нет. Так вот, Find поначалу работает нормально, а потом перестает возвращать true, хотя правильно возвращает номер найденноо значения.
← →
Сергей М. © (2009-03-19 16:59) [15]
> Anatoly Podgoretsky © (19.03.09 16:54) [13]
Дык тут по ходу выясняется, что ему, оказывается, результат перемешивания нужно поиметь не в том же листе, а в другом , см. [9]
Если в том же, то да, Exchange вполне бы подошел
← →
Palladin © (2009-03-19 17:00) [16]и взаправду бедняжка :)
← →
Сергей М. © (2009-03-19 17:02) [17]
> djkondakov (19.03.09 16:59) [14]
стринглист третий тут нафих не нужен, достаточно двух - один в Items листбокса-источника, другой в Items листбокса-приемника.
И Find тут тоже как корове седло
← →
djkondakov (2009-03-19 17:03) [18]>for i := 0 to OldListBox.Count - 1 do
>NewListBox.Items.Insert(Random(NewListBox.Count+1), OldListBox.Items[0])
А с этими "двумя строчками" получается не перемешивание, а тупо копирование!
← →
Palladin © (2009-03-19 17:05) [19]
> djkondakov (19.03.09 17:03) [18]
ну да, потому ниже находится исправленный вариант
← →
Сергей М. © (2009-03-19 17:09) [20]
> Palladin © (19.03.09 17:05) [19]
>
>
Судя по заторможенной реакции на ответы, бедняга вполне мог мучаться и неделю. Так что ему еще повезло)
← →
djkondakov (2009-03-19 17:12) [21]Да нет, просто параллельно с сидением в Инете пытаюсь разобраться сам...
Сергей М., спасибо огромное, все работает... Вы в двух строках написали то, что у меня было в 19 (!), да еще и не работало!
← →
Cobalt © (2009-03-20 01:11) [22]
> 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.
← →
Тын-Дын © (2009-03-20 01:30) [23]Удалено модератором
← →
Германн © (2009-03-20 01:35) [24]Удалено модератором
← →
KilkennyCat © (2009-03-20 02:09) [25]
> Вы в двух строках написали то, что у меня было в 19 (!),
> да еще и не работало!
:) Это можно просто цитировать....
← →
Palladin © (2009-03-20 03:07) [26]
> Германн © (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=
← →
Тын-Дын © (2009-03-20 20:40) [27]Удалено модератором
← →
12 (2009-03-20 21:15) [28]
> двух строках написали то, что у меня было в 19 (!),
> > да еще и не работало!
pishu skolko ugodno nerabotaushih strok.
za simvolicheskuu platu mogu i randomno ^)
← →
Palladin © (2009-03-20 21:38) [29]ах как мне стыдно как мне стыдно :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.05.03;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.008 c