我正在寻找使用键随机打乱列表/数组。我希望能够使用密钥重复相同的随机顺序。
所以我会随机生成一个从 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];
}
}