Я ищу, чтобы случайным образом перемешать список / массив с помощью ключа. Я хочу иметь возможность повторить тот же случайный порядок, используя клавишу.
Так что я буду случайным образом генерировать числовой ключ, скажем, от 1 до 20, а затем использовать этот ключ, чтобы попытаться случайным образом перемешать список.
Сначала я попытался просто использовать ключ, чтобы продолжить итерацию по моему списку, уменьшая ключ до = 0, затем захватывая любой элемент, на котором я нахожусь, удаляя его и добавляя его в мой перемешанный массив. Результат довольно случайный, но когда массивы маленькие (а большинство из них будут моими) и / или ключ маленький, это не приводит к случайному перемешиванию ... похоже, это больше сдвига.
Я должен быть в состоянии определить, в каком порядке
Вот пример кода на csharp из:
public static TList<VoteSetupAnswer> ShuffleListWithKey(TList<VoteSetupAnswer> UnsortedList, int ShuffleKey)
{
TList<VoteSetupAnswer> SortedList = new TList<VoteSetupAnswer>();
int UnsortedListCount = UnsortedList.Count;
for (int i = 0; i < UnsortedListCount; i++)
{
int Location;
SortedList.Add(OneArrayCycle(UnsortedList, ShuffleKey, out Location));
UnsortedList.RemoveAt(Location);
}
return SortedList;
}
public static VoteSetupAnswer OneArrayCycle(TList<VoteSetupAnswer> array, int ShuffleKey, out int Location)
{
Location = 0;
if (ShuffleKey == 1)
{
Location = 0;
return array[0];
}
else
{
for (int x = 0; x <= ShuffleKey; x++)
{
if (x == ShuffleKey)
return array[Location];
Location++;
if (Location == array.Count)
Location = 0;
}
return array[Location];
}
}