powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перетасовать элементы TStack
10 сообщений из 10, страница 1 из 1
Перетасовать элементы TStack
    #40047478
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для TStrings это можно сделать так:
Код: pascal
1.
2.
3.
4.
5.
procedure Shuffle(Strings: TStrings);
begin
  for var i := Strings.Count-1 downto 1 do 
    Strings.Exchange(i, Random(i+1));
end;



А как сделать подобное для стека? Желательно без копирования в другие структуры.
Код: pascal
1.
2.
3.
4.
5.
6.
type
  TEdge = record
    x,y,dir: Integer;
  end;

  edges: TStack<TEdge>;  
...
Рейтинг: 0 / 0
Перетасовать элементы TStack
    #40047480
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Как мне запрячь лошадь в мерседес, желательно без дополнительных устройств. С телегой это делается так: ..."

Стэк как бы придуман для того, чтобы его элементы сохраняли свой порядок. Так что единственный вариант, который я вижу - написать хэлпер/наследника, добавив метод Shuffle(). И то не факт, что получится получить доступ к его элементам, возможно придётся писать свой аналог полностью.
...
Рейтинг: 0 / 0
Перетасовать элементы TStack
    #40047483
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чём смысл вообще использовать стэк, чтобы использовать его не как стэк?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перетасовать элементы TStack
    #40047485
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам
А в чём смысл вообще использовать стэк, чтобы использовать его не как стэк?

После перемешивания далее он и будет использоваться как стэк, со всеми его фичами.
Но раз "нет", так нет - пойду другим путем. Вопрос снимается.
...
Рейтинг: 0 / 0
Перетасовать элементы TStack
    #40047488
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
LiYing
Гаджимурадов Рустам
А в чём смысл вообще использовать стэк, чтобы использовать его не как стэк?

После перемешивания далее он и будет использоваться как стэк, со всеми его фичами.


как-то сложно представляю, какое применение вот этому всему
...
Рейтинг: 0 / 0
Перетасовать элементы TStack
    #40047490
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, теоретически можно придумать что-то вроде решафл
барабана лотереи или колоды карт, но сама логика странная.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перетасовать элементы TStack
    #40047491
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. это должен быть наследник (или не наследник),
который расширяет интерфейс стэка, как минимум,
одним методом Shuffle.

По ходу и другие требования всплывут, наверняка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перетасовать элементы TStack
    #40047492
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
как-то сложно представляю, какое применение вот этому всему

В теории - например, для перемешивания списка задач, если однотипные задачи генерятся пачкой, но надо дать выполниться и другим

По теме: либо своя реализация, либо перетаскивать в промежуточное хранилище и заполнять стек заново. Либо допапываться до прямого доступа к элементам, если методы не строго приватные
...
Рейтинг: 0 / 0
Перетасовать элементы TStack
    #40047496
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

Зачем вообще стек, если смысл - получать элементы в случайном порядке?.. Проще TList взять, перемешать и вызывать Extract(Last).
...
Рейтинг: 0 / 0
Перетасовать элементы TStack
    #40047497
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp
Проще TList взять, перемешать и вызывать Extract(Last).

Именно так я и сделал. Давайте уже закроем эту тему, лучше вон с Ruby помогите :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перетасовать элементы TStack
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]