所以我有以下通用列表:
var topTenSomething = new List<Something>();
这是 Something:
public class Something
{
public string Name { get; set; }
public int Rank { get; set; }
}
所以我想随机分配“Rank”属性,但需要从集合中的1个项目中进行排序。
因此,如果该集合有3个项目,我想随机分配从1到3的等级:
然后下一次,它可能是:
知道我的意思吗?
不知道怎么做 - 任何想法?
这是一个简单的R&amp; D原型 - 所以不要担心性能/为什么我这样做。 (真实的将由数据库分配等级)
对LINQ /非LINQ版本感到满意 - 只要它有效。
答案 0 :(得分:5)
像这样:
var rand = new Random();
var sequence = Enumerable.Range(0, list.Count).OrderBy(i => rand.Next()).ToList();
for(var i = 0; i < list.Count; i++)
list[i].Rank = sequence[i];
如果您希望按随机排名对列表进行排序:
var rand = new Random();
list.Sort((a, b) => rand.Next(-1, 2)); //Exclusive upper bound
for(var i = 0; i < list.Count; i++)
list[i].Rank = i;
但是,这不是有效排序(a < b
并不意味着b > a
),可能会导致意外结果。
答案 1 :(得分:0)
这应该有效:
List<Something> somethings = new List<Something>();
/* TODO: populate list here... */
Random rand = new Random();
somethings.ForEach(s=>s.Rank = rand.Next(1, somethings.Count - 1));