Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1235950633
Real
2009-03-02 02:37
2009.05.03
Русский MSDN


2-1237446555
D@nger
2009-03-19 10:09
2009.05.03
Форматирование чисел


2-1237419179
Новичок
2009-03-19 02:32
2009.05.03
Программное добавление полей в ADOTable1


15-1235981006
БарЛог
2009-03-02 11:03
2009.05.03
Может ли скрипт узнать, для какой страницы его вызывают?


2-1237352448
DmitriyR
2009-03-18 08:00
2009.05.03
Регулярные выражения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский