计算除Max值和Min值以及零值之外的数组中的所有数字

时间:2013-08-14 04:21:41

标签: c# arrays lambda

我从文本框中得到一些数字,我想计算这些数字的平均值:

float t1 = float.Parse(textBox1.Text);
float t2 = float.Parse(textBox2.Text);
float t3 = float.Parse(textBox3.Text);
float t4 = float.Parse(textBox4.Text);
float t5 = float.Parse(textBox5.Text);
float t6 = float.Parse(textBox6.Text);
float t7 = float.Parse(textBox7.Text);
float[] array = { t1,t2,t3,t4,t5,t6,t7};
float final_Score = array.Average(); 

但我不希望Max值和Min参与者计算此值:

float final_Score = array.Average()-(array.Max())-(array.Min());

现在我的问题是,我想获得非零数字的平均值,我该怎么做?

另一个问题: 我想改变非{0}数字MaxMin的文本框的颜色。

Controls.OfType<TextBox>().Where(x => x.Text == array.Max().ToString()).FirstOrDefault().BackColor = Color.Red;
Controls.OfType<TextBox>().Where(x => x.Text == array.Min().ToString()).FirstOrDefault().BackColor = Color.Red;

1 个答案:

答案 0 :(得分:4)

对于任何一种解决方案,请使用:

int min = array.Min();
int max = array.Max();

然后是:

float finalScore = array.Except(array.Where(a => a == 0 
                                              || a == min 
                                              || a == max))
                        .Average();

或者:

float finalScore = array.Where(a => a != 0 
                                 && a != min  
                                 && a != max)
                        .Average();

最后,为了回答OP遇到的问题,如果你需要过滤0和0以上的最小值那么你必须做(而不是原来的int min行):

int min = array.Where(a => a > 0).Min();