![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 26.03.2010
Сообщений: 78
|
![]()
Как в tstringlist перемешать строчки? есть ли функция как в php(перемешивание элементов массива)?
![]()
Начинающий кодер Delphi + PHP
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
TStringList не массив.
а так можете ручками взять и написать такую функцию. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]()
Tstrings Exchange & random
программа — запись алгоритма на языке понятном транслятору
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
дополню ответы коллег примером кода.
Код:
p.s. случайное распределение будет нормальное, т.к. в алгоритме учтены поправки отсюда Как не надо тасовать карты |
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 26.03.2010
Сообщений: 78
|
![]()
Cергей, спасибо вам большое, но я написал свою функцию
Цитата:
![]()
Начинающий кодер Delphi + PHP
|
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
ваш вариант ОЧЕНЬ плох..
1) откуда взялось число 100 ?! почему не 10 или не 500 или не 10000 ? 2) чем больше записей будет в исходном TStringList, тем больше записей вообще останутся "нетронутыми" (ну, очевидно, что если у Вас будет больше 200 строчек, то даже в самом оптимальном случае ГАРАНТИРОВАННО будут те строчки, которые не попададут в "переплёт", т.е. не будут ни с кем обмены) Заполните, например, ваш TStringGrid числами от 1 до 1000 перемешайте и выведите результат в Memo Вы будете потрясены. Целые блоки (последовательности) исходных чисел будут стоять на своих первоначальных местах. 3) В Вашем коде о каком-то равномерномерном-неравномерном распределении говорить вообще не приходится! Для большего понимания о чём идёт речь, рекомендую ознакомится вот с этой темой на форуме: В хаотическом порядке получить числа 1-100 ну и не помешает сходить по ссылке, которую я уже приводил "Как не надо тасовать карты" 4) надеюсь, Вы не забыли в своей программе вызвать Randomize; ?! Это очень Важно! Но вполне достаточно сделать вызов один раз. Например, на событии создания формы OnCreate 5) а чем мой вариант не устроил? вроде простой, надежный и быстрый... |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
перемешать listbox | nevru1bphp | Общие вопросы Delphi | 2 | 15.10.2010 09:20 |
скрыть строчки | peq | Microsoft Office Excel | 2 | 23.11.2009 20:15 |
Как быстро перемешать строки? | zver777 | Общие вопросы Delphi | 5 | 23.08.2009 20:50 |
MySql - перемешать варианты в базе | Shadow_Wind | PHP | 9 | 17.10.2008 09:55 |
сравнить 2 строчки | oLMeR | Общие вопросы Delphi | 3 | 02.11.2007 11:51 |