我想根据作为日期的种子从集合(1-10)中随机选择一组3。我想每天挑选3件新商品,而不是重复我前一天选择的商品。 挑选物品不是问题,但我怎么知道昨天挑选了哪些物品,我可以只知道日期重建它吗?
答案 0 :(得分:0)
是的,你可以。类Random
提供伪随机序列。当您使用相同的种子值启动它时,序列始终是相同的(检查Random(int seed)构造函数)。所以
我如何知道昨天选择了哪些,我可以重建 只知道日期?
要获取您昨天选择的号码,您应该使用与昨天使用的相同的种子。例如。您可以使用Ticks
对象DateTime
的值作为给定日期。
var today = DateTime.Today();
var random = new Random(today.Ticks);
var todayItems = items.OrderBy(x => random.Next()).Take(3).ToList();
var yesterday = today.AddDays(-1);
random = new Random(yesterday.Tikcs);
var yesterdayItems = items.OrderBy(x => random.Next()).Take(3).ToList();
现在比较今天和昨天的项目。
答案 1 :(得分:0)
如果您的收藏中有10个项目,那么您可以将3个项目的子集表示为三个二进制数字,并且只设置三个位。只需设置与三个选项对应的位。如果选择集合中的项目0,5和7,则将位数0,5和7设置为10位数字。存储该号码,并使用它来防止第二天再次选择相同的三个。只需将昨天的数字与今天的数字进行比较。 10位数字很容易适合C#整数。