2011-09-12 48 views
4

我正在創建一個程序,我想從列表中獲取得分x的百分數(列表結果)。我知道公式是[(A +(0.5)B)/ n] * 100其中'A'=低於分數x的分數#,'B'=分數等於分數x的分數#和'n'=總數分數。如何從CSharp中的列表中獲取百分位數?

我的問題是,我無法設法從最高到最低排序整個列表,我找不到與x相等的分數。

+2

這是功課嗎? – dtb

+0

抱歉,我已將您的問題理解爲false,因此我刪除了我的帖子 – icaptan

+0

不,它不是作業...我正在調整我之前的一個程序(評分系統),看看我是否可以修改它以包含百分點。 – Chielle

回答

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

(我用兩個,以減少整數除法的影響,改變了除法和乘法和縮放一切的順序。)

+0

'less.Count()','equal.Count()'? – Dyppl

+0

@Dyppl:不,這些都是整數 - 我將'Where'調用改爲'Count'調用,這是我以前的意圖:) –

+0

@CodeInChaos:我不這麼認爲......至少不是到OP的公式。 –

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

這幫了我..謝謝! – McDee

相關問題