我有一個整數列表,即刪除項目:用價值超過平均
List<int> test = new List<int>() {
5, 5, 4, 0, 1, 23456732, 4, 3, 2, 4, 3
};
我想計算列表中的整數的平均水平,但沒有考慮到任何異常值(如一個在中間)。我可以使用List對象中的任何方法嗎?什麼是最好的方法來處理它?
我有一個整數列表,即刪除項目:用價值超過平均
List<int> test = new List<int>() {
5, 5, 4, 0, 1, 23456732, 4, 3, 2, 4, 3
};
我想計算列表中的整數的平均水平,但沒有考慮到任何異常值(如一個在中間)。我可以使用List對象中的任何方法嗎?什麼是最好的方法來處理它?
使用LINQ:
var average = test.Average();
如果您想要排除某些值,那麼你需要對其進行過濾:
// average of numbers less than 100
var average = test.Where(i => i < 100).Average();
您可以定義自己的函數,它會檢查給定數量是否正常:
var average = test.Where(i => IsNormal(i)).Average();
// method
bool IsNormal(int number)
{
// your logic here
return true;// or false
}
或'test.Where(i => IsNormal(i))。Average();'讓IsNormal給定義:) – 2014-09-12 15:18:37
@GrzegorzSławecki:lol – 2014-09-12 15:19:30
Good call @GrzegorzSławecki,將其添加到我的答案中,我們將剩下的給Bartosz。謝謝! – Zbigniew 2014-09-12 15:19:53
你可以先只計算median
然後我們對於(在本例中10)僅僅是一個給定的因素從median
遠離計算Ë值:
public double GetResult(List<int> values)
{
int median = Median(values);
return values.Where(x => Math.Abs(x - median) < 10 * median).Average();
}
public static int Median(IEnumerable<int> list)
{
List<int> orderedList = list
.OrderBy(numbers => numbers)
.ToList();
int listSize = orderedList.Count;
int result;
if (listSize % 2 == 0) // even
{
int midIndex = listSize/2;
result = ((orderedList.ElementAt(midIndex - 1) +
orderedList.ElementAt(midIndex))/2);
}
else // odd
{
double element = (double)listSize/2;
element = Math.Round(element, MidpointRounding.AwayFromZero);
result = orderedList.ElementAt((int)(element - 1));
}
return result;
}
從這個頁面採取位數算出:http://www.remondo.net/calculate-mean-median-mode-averages-csharp/
你怎麼定義'abnormal'? – Zbigniew 2014-09-12 15:13:26
你可能想要的是平均值,而不是平均值。 – ths 2014-09-12 15:14:33
是什麼讓23456732「異常」? – batwad 2014-09-12 15:15:41