如何从CSharp的列表中获得百分位数?

时间:2011-09-12 09:16:05

标签: c# percentile

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

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

2 个答案:

答案 0 :(得分:8)

听起来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,以减少整数除法的影响。)

答案 1 :(得分:3)

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);