【问题标题】:How do I get a percentile from a list in CSharp?如何从 CSharp 中的列表中获取百分位数?
【发布时间】:2011-11-15 04:25:26
【问题描述】:

我正在创建一个程序,我想从列表(列表结果)中获取分数 x 的百分位数。我知道公式是 [(A + (0.5) B) / n] * 100 其中'A' = 分数低于 x 的分数,'B' = 分数等于 x 和'n' = 总分分数。

我的问题是,我无法将整个列表从高到低排序,也无法找到等于 x 的分数。

【问题讨论】:

  • 对不起,我理解你的问题是错误的,所以我删除了我的帖子
  • 不,这不是家庭作业...我正在调整我以前的一个程序(评分系统),看看我是否可以修改它以包含百分位数。
  • 我在找同样的你从哪里得到这个公式的??

标签: c# percentile


【解决方案1】:

LINQ 很好,但如果您需要性能(如果您的数据集很大或者如果您需要执行很多次)或者如果它确实是家庭作业,那么一次性实现非常容易:

int less = 0;
int equal = 0;
foreach (int item in list) {
    if (item < x)
        less++;
    else if (item == x)
        equal++;       
}
var result = (200 * less + 100 * equal) / (list.Count * 2);

【讨论】:

    【解决方案2】:

    听起来 LINQ 对你很有用:

    int equal = tests.Count(tests => test.Score == x);
    int less = tests.Count(tests => test.Score < x);
    
    int percentile = (200 * less + 100 * equal) / (tests.Count * 2);
    

    (为了减少整数除法的影响,我改变了除法和乘法的顺序,并将所有内容都缩放了 2。)

    【讨论】:

    • less.Count(), equal.Count()?
    • @Dyppl:不,这些是整数 - 我将 Where 调用更改为 Count 调用,这是我之前想要的 :)
    • @CodeInChaos:我不这么认为......至少不是根据 OP 的公式。
    • @jon Skeet 我正在寻找相同的计算百分位数的公式是什么。???
    • @NikhilVC:如果这个答案对您没有帮助并且其他研究对您没有帮助,我建议您提出一个更详细的新问题。
    猜你喜欢
    • 2015-08-16
    • 2020-10-28
    • 2018-02-05
    • 2020-11-13
    • 2015-02-14
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多