0

现在的一个问题是我从列表中随机挑选元素并将它们显示给用户,这些元素随着 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();
}
4

1 回答 1

4

您可以使用Randomclass 来打乱您的列表,并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)];
}
于 2013-08-21T17:17:32.243 回答