我正在创建一个程序,我希望从列表中获得分数x的百分位数(列表结果)。我知道公式是[(A +(0.5)B)/ n] * 100其中'A'=得分低于得分x,'B'=等于得分x的得分#和'n'=总数分数。
我的问题是,我无法将整个列表从最高到最低排序,我无法找到等于x的分数。
答案 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);