我正在創建一個程序,我想從列表中獲取得分x的百分數(列表結果)。我知道公式是[(A +(0.5)B)/ n] * 100其中'A'=低於分數x的分數#,'B'=分數等於分數x的分數#和'n'=總數分數。如何從CSharp中的列表中獲取百分位數?
我的問題是,我無法設法從最高到最低排序整個列表,我找不到與x相等的分數。
我正在創建一個程序,我想從列表中獲取得分x的百分數(列表結果)。我知道公式是[(A +(0.5)B)/ n] * 100其中'A'=低於分數x的分數#,'B'=分數等於分數x的分數#和'n'=總數分數。如何從CSharp中的列表中獲取百分位數?
我的問題是,我無法設法從最高到最低排序整個列表,我找不到與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);
(我用兩個,以減少整數除法的影響,改變了除法和乘法和縮放一切的順序。)
'less.Count()','equal.Count()'? – Dyppl
@Dyppl:不,這些都是整數 - 我將'Where'調用改爲'Count'調用,這是我以前的意圖:) –
@CodeInChaos:我不這麼認爲......至少不是到OP的公式。 –
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);
這幫了我..謝謝! – McDee
這是功課嗎? – dtb
抱歉,我已將您的問題理解爲false,因此我刪除了我的帖子 – icaptan
不,它不是作業...我正在調整我之前的一個程序(評分系統),看看我是否可以修改它以包含百分點。 – Chielle