Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Delphi |
![]() ![]() |
LiYing Member Откуда: Сообщений: 640 |
Для TStrings это можно сделать так:procedure Shuffle(Strings: TStrings); begin for var i := Strings.Count-1 downto 1 do Strings.Exchange(i, Random(i+1)); end; А как сделать подобное для стека? Желательно без копирования в другие структуры. type TEdge = record x,y,dir: Integer; end; edges: TStack<TEdge>; |
20 фев 21, 12:12 [22284005] Ответить | Цитировать Сообщить модератору |
alekcvp Member Откуда: Сообщений: 2730 |
"Как мне запрячь лошадь в мерседес, желательно без дополнительных устройств. С телегой это делается так: ..." Стэк как бы придуман для того, чтобы его элементы сохраняли свой порядок. Так что единственный вариант, который я вижу - написать хэлпер/наследника, добавив метод Shuffle(). И то не факт, что получится получить доступ к его элементам, возможно придётся писать свой аналог полностью. |
20 фев 21, 12:21 [22284008] Ответить | Цитировать Сообщить модератору |
Гаджимурадов Рустам Member Откуда: Сообщений: 62404 |
А в чём смысл вообще использовать стэк, чтобы использовать его не как стэк? Posted via ActualForum NNTP Server 1.5 |
20 фев 21, 12:23 [22284011] Ответить | Цитировать Сообщить модератору |
LiYing Member Откуда: Сообщений: 640 |
После перемешивания далее он и будет использоваться как стэк, со всеми его фичами. Но раз "нет", так нет - пойду другим путем. Вопрос снимается. Сообщение было отредактировано: 20 фев 21, 12:24 |
||||
20 фев 21, 12:25 [22284013] Ответить | Цитировать Сообщить модератору |
defecator Member Откуда: Сообщений: 39683 |
как-то сложно представляю, какое применение вот этому всему |
||||||||
20 фев 21, 12:31 [22284016] Ответить | Цитировать Сообщить модератору |
Гаджимурадов Рустам Member Откуда: Сообщений: 62404 |
Нет, теоретически можно придумать что-то вроде решафл барабана лотереи или колоды карт, но сама логика странная. Posted via ActualForum NNTP Server 1.5 |
20 фев 21, 12:35 [22284018] Ответить | Цитировать Сообщить модератору |
Гаджимурадов Рустам Member Откуда: Сообщений: 62404 |
Т.е. это должен быть наследник (или не наследник), который расширяет интерфейс стэка, как минимум, одним методом Shuffle. По ходу и другие требования всплывут, наверняка. Posted via ActualForum NNTP Server 1.5 |
20 фев 21, 12:37 [22284019] Ответить | Цитировать Сообщить модератору |
Fr0sT-Brutal Member Откуда: Сообщений: 587 |
В теории - например, для перемешивания списка задач, если однотипные задачи генерятся пачкой, но надо дать выполниться и другим По теме: либо своя реализация, либо перетаскивать в промежуточное хранилище и заполнять стек заново. Либо допапываться до прямого доступа к элементам, если методы не строго приватные |
||||
20 фев 21, 12:38 [22284021] Ответить | Цитировать Сообщить модератору |
alekcvp Member Откуда: Сообщений: 2730 |
Fr0sT-Brutal, Зачем вообще стек, если смысл - получать элементы в случайном порядке?.. Проще TList взять, перемешать и вызывать Extract(Last). Сообщение было отредактировано: 20 фев 21, 12:49 |
20 фев 21, 12:55 [22284027] Ответить | Цитировать Сообщить модератору |
LiYing Member Откуда: Сообщений: 640 |
Именно так я и сделал. Давайте уже закроем эту тему, лучше вон с Ruby помогите :) |
||||
20 фев 21, 13:00 [22284032] Ответить | Цитировать Сообщить модератору |
Все форумы / Delphi | ![]() |