次のメソッドを使用して、IDのリストからランダムな値を取得しています。
private int GetRandomDateBasedSectorId(IEnumerable<int> sectorIds)
{
var randomSortTable = new Dictionary<int, int>();
foreach (int id in sectorIds)
randomSortTable[new Random(DateTime.Now.DayOfYear).Next()] = id;
return randomSortTable.OrderBy(KVP => KVP.Key).Select(KVP => KVP.Value).FirstOrDefault();
}
シードとして使用DateTime.Now.DayOfYear
している理由は、メソッドが1日実行されるたびに同じセクターIDを選択し、翌日は別のランダムなIDを選択するためです。
これはある程度機能しますが、完璧ではありません。たとえば、昨日の朝と前夜は一貫して単一のセクターIDを選択していましたが、昨日のある時点で別のセクターIDの選択を開始しましたが、今日でも昨日の午後と同じセクターIDを使用しています。
グリニッジ標準時の深夜0時(現在のタイムゾーン)に変更されると思いDateTime.Now.DayOfYear
ましたが、そうではないようです。
DateTime.Now.DayOfYear
予想とは異なる動作をした場合、誰かが私に記入できますか?もしそうなら、毎日深夜にリストから新しいセクターIDを確実に選択できるように、これを変更する方法はありますか?