キーを使用してリスト/配列をランダムにシャッフルしようとしています。キーを使用して同じランダムな順序を繰り返すことができるようにしたい。
したがって、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];
}
}