如何计算集合中值的百分位数或排名?

时间:2012-02-05 08:16:04

标签: c# xml linq algorithm percentile

我在XML文件中收集了大约8,000个测试分数。 使用Linq和C#,计算特定测试分数百分位数的最有效方法之一是什么。

我的重点是效率。那么推荐的方法是什么?我也在寻找适合此计算的内置Linq或C#函数。有没有叫Percentile()或TopPercent的东西?

1 个答案:

答案 0 :(得分:7)

在您确认自己需要担心之前,这听起来像是在担心效率。

我会采取以下方法:

  • 使用LINQ to XML(作为.NET中最简单的XML API)将XML文件加载到内存中
  • 将分数转换为整数列表(或任何分数类型)
  • 您现在可以轻松找到总计数
  • Count与谓词一起使用,以了解有多少分数低于“目标”分数

如果您需要检查多个分数,显然需要重复最后一步。

我的第一次尝试优化此项(用于多次检查)将对列表进行排序,因此您可以进行二元搜索以查找每个分数的等级。我只会在基准测试后远离那个