制作一个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();
}

制作一个c#列表,在一整天中显示相同的项目,然后在第二天显示另一个随机元素

您可以使用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)];
}
相关文章: