Ваш вопрос является алгоритмом вопроса.Вам нужна последовательность чисел, которая кажется случайной, но более однородной.
То, что вы ищете, называется последовательность с малым расхождением .Простая форма этого - «случайная сумка», часто используемая в разработке игр, как описано здесь или здесь .
С сумкой случайного воспроизведения вы в основном генерируетевсе индексы (например, 0 1 2 3 4 5), перетасуйте их (например, 2 3 5 1 0 4) и затем отобразите элементы в следующем порядке.В конце вы создаете другую последовательность (например, 4 1 0 2 3 5).Обратите внимание, что возможно, что один и тот же элемент появляется дважды в последовательности, хотя это происходит редко.Например, в этом случае «4» является дубликатом, потому что полная последовательность 2 3 5 1 0 4 4 1 0 2 3 5.
arc4random()
- это хороший PRNGна платформах Apple, так что это не дает «последовательность с низким расхождением».Но: вы можете использовать его как примитив для генерации «последовательностей с низким расхождением», вы также можете использовать его как примитив для создания реализации shuffle bag.