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

use*_*554 1 c# xml linq algorithm percentile

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

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

Jon*_*eet 7

在您确认需要担心它之前,这听起来像是在担心效率问题.

我会采取以下方法:

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

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

首次尝试优化它(用于多次检查)将对列表进行排序,这样您就可以进行二分查找以找到每个分数的等级.我只是在基准测试后走了那么远.