制作一个c#列表,在一整天中显示相同的项目,然后在第二天显示另一个随机元素
本文关键字:显示 然后 元素 随机 另一个 第二天 项目 一整天 一个 列表 | 更新日期: 2023-09-27 18:28:27
现在的一个问题是,我正在从列表中随机挑选元素,并将它们显示给用户,随着asp.net的每次页面刷新,这些元素都会发生变化。
然而,我想显示一个元素一整天,然后在第二天另一个,以此类推
我随机挑选列表元素的代码是:
public static List<T> Shuffle<T>(this IList<T> list)
{
RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
int n = list.Count;
while (n > 1)
{
byte[] box = new byte[1];
do provider.GetBytes(box);
while (!(box[0] < n * (Byte.MaxValue / n)));
int k = (box[0] % n);
n--;
T value = list[k];
list[k] = list[n];
list[n] = value;
}
return list.ToList();
}
您可以使用Random
类来打乱您的列表,并根据当前日期提供seed
值:
public static void Shuffle<T>(this IList<T> list)
{
Random rng = new Random(unchecked((int)DateTime.Today.Ticks));
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
因为您将在一整天中使用相同的种子初始化Random
实例,所以您将获得由rng.Next
方法生成的相同的数字序列。
为了在同一天内每次刷新都能获得相同的单个物品,您不需要打乱您的收藏:
public static T GetRandomItemForToday<T>(this IList<T> list)
{
Random rng = new Random(unchecked((int)DateTime.Today.Ticks));
return list[rng.Next(list.Count)];
}