订单列表 "randomly" 每天
Order list "randomly" per day
我有一个 IQuerable<Post>
并随机排序我执行以下操作:
IQuerable<Post> posts = getPosts();
posts = posts.OrderBy(x => Guid.NewGuid());
是否可以每天随机排序?
如果我在 4 月 18 日订购,我总是会收到相同的订单。
但是在 4 月 19 日我会收到另一个随机订单。
指南不能保证是随机的,只能是唯一的。不要将 Guids 用于随机数据。 .NET 框架中有特定的 类 旨在提供(伪)随机数 - Random
是最简单的,但如果你想要加密质量,请尝试 System.Security.Cryptography.RandomNumberGenerator
.
在你的情况下 Random
是你的朋友。您可以使用从今天日期创建的值作为种子。
试试这个:
var seed = (int)DateTime.Now.Date.Ticks;
var random = new Random(seed);
IQueryable<Post> posts = getPosts();
Post[] sorted =
posts
.ToArray()
.Select(post => new { post, random = random.Next() })
.OrderBy(x => x.random)
.Select(x => x.post)
.ToArray();
当我运行用线束代码时:
IQueryable<Post> getPosts()
{
return Enumerable.Range(0, 5).Select(x => new Post() { Id = x }).AsQueryable();
}
public class Post
{
public int Id;
}
我今天得到 4, 3, 1, 0, 2
。明天就是4, 2, 3, 0, 1
。周二是 3, 4, 2, 0, 1
.
我有一个 IQuerable<Post>
并随机排序我执行以下操作:
IQuerable<Post> posts = getPosts();
posts = posts.OrderBy(x => Guid.NewGuid());
是否可以每天随机排序?
如果我在 4 月 18 日订购,我总是会收到相同的订单。
但是在 4 月 19 日我会收到另一个随机订单。
指南不能保证是随机的,只能是唯一的。不要将 Guids 用于随机数据。 .NET 框架中有特定的 类 旨在提供(伪)随机数 - Random
是最简单的,但如果你想要加密质量,请尝试 System.Security.Cryptography.RandomNumberGenerator
.
在你的情况下 Random
是你的朋友。您可以使用从今天日期创建的值作为种子。
试试这个:
var seed = (int)DateTime.Now.Date.Ticks;
var random = new Random(seed);
IQueryable<Post> posts = getPosts();
Post[] sorted =
posts
.ToArray()
.Select(post => new { post, random = random.Next() })
.OrderBy(x => x.random)
.Select(x => x.post)
.ToArray();
当我运行用线束代码时:
IQueryable<Post> getPosts()
{
return Enumerable.Range(0, 5).Select(x => new Post() { Id = x }).AsQueryable();
}
public class Post
{
public int Id;
}
我今天得到 4, 3, 1, 0, 2
。明天就是4, 2, 3, 0, 1
。周二是 3, 4, 2, 0, 1
.