我在一个 XML 文件中收集了大约 8,000 个测试分数。 使用 Linq 和 C#,计算特定测试分数的百分位数的最有效方法之一是什么。
我强调的是效率。那么推荐的方法是什么?我也在寻找为此计算推荐的合适的内置 Linq 或 C# 函数。有没有叫做 Percentile() 或 TopPercent 的东西?
最佳答案
这听起来像是在确认您需要担心效率之前担心效率。
我会采取以下方法:
- 使用 LINQ to XML(作为 .NET 中最简单的 XML API)将 XML 文件加载到内存中
- 将分数转换为整数列表(或任何分数类型)
- 您现在可以轻松找出总数
- 将
Count
与谓词一起使用,找出有多少分数低于您的“目标”分数
如果您需要检查多个分数,您显然只需要重复最后一步。
我第一次尝试对此进行优化(用于多次检查)是对列表进行排序,这样您就可以进行二进制搜索以找到每个分数的排名。不过,我只会在基准测试之后那个。
关于c# - 如何计算集合中值的百分位数或排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9147889/