C# Generic List<T> - 如何为每个项目随机分配一个 "Rank"?

标签 c# linq collections random ranking

所以我有以下通用列表:

var topTenSomething = new List<Something>();

这是东西:

public class Something
{
   public string Name { get; set; }
   public int Rank { get; set; }
}

所以我想随机分配“Rank”属性,但它需要从集合中的 1 个项目中排序。

所以如果集合有 3 个项目,我想随机分配从 1 到 3 的等级:

  1. 一些名字
  2. 其他名字
  3. 其他

那么下一次,它可能是:

  1. 其他名字
  2. 一些名字
  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/

相关文章:

c# - 在 Aspose.Words LINQ 报告引擎中构建报告的动态对象

c# - StringCollection.Count 意外增加

c# - 如何在 mysql varchar 数据类型列中添加 ' 像特殊字符?

linq - 从泛型方法构造 Linq 表达式

c# - 如何检查 Linq 查询结果中的 DBNull 值

javascript - 将集合数组添加到 Backbone JS 中先前添加的集合中

C#类自动调用它的方法

c# - 如何将C# linq中的groupby视为二维列表?

c# - 最佳实践 : How to expose a read-only ICollection

Scala 2.11 LinkedList 已弃用,我应该使用什么?