我正在创建一个程序,我想从列表(列表结果)中获取分数 x 的百分位数。我知道公式是 [(A + (0.5) B) / n] * 100 其中'A' = 分数低于 x 的分数,'B' = 分数等于 x 和'n' = 总分分数的数量。
我的问题是,我无法将整个列表从最高到最低排序,也无法找到等于 x 的分数。
我正在创建一个程序,我想从列表(列表结果)中获取分数 x 的百分位数。我知道公式是 [(A + (0.5) B) / n] * 100 其中'A' = 分数低于 x 的分数,'B' = 分数等于 x 和'n' = 总分分数的数量。
我的问题是,我无法将整个列表从最高到最低排序,也无法找到等于 x 的分数。
听起来 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,以减少整数除法的影响。)
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);