Как получить уникальные случайные элементы из массива? - PullRequest
3 голосов
/ 19 февраля 2011

Привет,
У меня есть массив (уникальных) объектов, и я хотел бы получить 4 случайных объекта из этого массива, но один и тот же объект не должен выбираться дважды, поэтому использование простой случайной функции не поможетРабота.

У меня было две идеи:
1. Перемешать массив и получить первые 4 элемента.-> Накладные расходы, поскольку массив может быть очень большим.
2. Создать случайный индекс.Если этот индекс использовался ранее, попробуйте еще раз, и так далее ... -> Несколько ненадежно ...

Знаете ли вы лучший, более эффективный метод?

1 Ответ

10 голосов
/ 19 февраля 2011

Перемешайте массив и получите первые 4 элемента.-> Накладные расходы, поскольку массив может быть очень большим.

Используйте современную версию из Фишера Йетса shuffle .Это может быть выполнено на месте , и если вы остановитесь после первых четырех перестановок, это даст вам нужный вам результат.Нет необходимости перетасовывать весь массив.

По сравнению с некоторыми другими решениями он также имеет то преимущество, что, если требуется только часть полученной перестановки, его можно остановить на полпути через

...