Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перетасовать элементы TStack / 10 сообщений из 10, страница 1 из 1
20.02.2021, 12:12
    #40047478
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетасовать элементы TStack
Для 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
20.02.2021, 12:21
    #40047480
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетасовать элементы TStack
"Как мне запрячь лошадь в мерседес, желательно без дополнительных устройств. С телегой это делается так: ..."

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

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

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


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

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

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

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

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

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


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