4

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

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

4

2 回答 2

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

于 2011-09-12T09:20:03.357 回答
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);
于 2011-09-12T09:27:07.610 回答