所以我有以下通用列表:
var topTenSomething = new List<Something>();
这是东西:
public class Something
{
public string Name { get; set; }
public int Rank { get; set; }
}
所以我想随机分配“Rank”属性,但它需要从集合中的 1 个项目中排序。
所以如果集合有 3 个项目,我想随机分配从 1 到 3 的等级:
- 一些名字
- 其他名字
- 其他
那么下一次,它可能是:
- 其他名字
- 一些名字
- 其他
明白我的意思吗?
不确定该怎么做 - 有什么想法吗?
这是一个简单的研发原型(prototype) - 所以不要担心性能/我为什么这样做。 (真正的会有数据库分配的排名)
对 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];
如果您希望列表按随机排名排序:
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
)并且可能会导致意外结果。
关于C# Generic List<T> - 如何为每个项目随机分配一个 "Rank"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4331350/