RPM*_*984 1 c# linq random collections ranking
所以我有以下通用列表:
var topTenSomething = new List<Something>();
Run Code Online (Sandbox Code Playgroud)
这是件事:
public class Something
{
public string Name { get; set; }
public int Rank { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以我想随机分配"Rank"属性,但需要从集合中的1个项目中进行排序.
因此,如果集合有3个项目,我想随机分配从1到3的排名:
然后下一次,它可能是:
明白我的意思了吗?
不知道怎么做 - 任何想法?
这是一个简单的研发原型 - 所以不要担心性能/为什么我这样做.(真实的将由数据库分配排名)
对LINQ /非LINQ版本感到满意 - 只要它有效.
像这样:
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];
Run Code Online (Sandbox Code Playgroud)
如果您希望按随机排名对列表进行排序:
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;
Run Code Online (Sandbox Code Playgroud)
但是,这不是有效的排序(a < b并不意味着b > a),可能会导致意外结果.