2014-03-01 108 views
0

如果我想从账单中删除费用(myCharges),该怎么办?特别是,我应该从账单中删除最小的费用(调整总额),并将扣除的费用显示为“扣除费用”文本,然后显示新的总额。从给定数组中减去最小数字

我不知道如何减去最低myCharges。

double[] myCharges = {20, 33.89, 84, 61.55} ; 
double total = 0; 

for (int i = 0; i < myCharges.Length; i++) 
{ 
    total += myCharges[i]; 
} 

Console.WriteLine("Total of MyCharges are {0:C}",total); 

Console.WriteLine("Charge Removed" , newtotal) ; 
Console.WriteLine("Average of MyCharges are {0:C}" , myCharges.Average().ToString("0.00")) ; 
Console.ReadKey(); 

回答

1

使用LINQ和Lambda。那么解决办法是:

double[] myCharges = { 20, 33.89, 84, 61.55 }; 

Console.WriteLine("Total of MyCharges are {0:C}", myCharges.Sum()); 

// Here is the trick: remove the smallest charge from the bill<br /> 
myCharges = myCharges.Where(n => n != myCharges.Min()).ToArray(); 

Console.WriteLine("New Total After Smallest Charge Removed {0:C}", myCharges.Sum()); 
Console.WriteLine("Average of MyCharges are {0:C}", myCharges.Average().ToString("0.00")); 
Console.ReadKey(); 
0

是这样的吗?

var lowestCharge = myCharges.OrderBy(n => n).First(); 
var totalWithoutLowestCharge = total - lowestCharge; 
+0

我不明白n => n。根据我的代码,我应该写什么 – user3341720

+0

您应该可以按原样使用它。 “n”只是我在这个lambda表达式中使用的变量的名称。 – Martin

0

如果要添加唯一不同的是最小的所有费用,您可以订购您的费用最小到最大,然后加起来所有,但第一个(最小的)之一:

var totalMinusSmallestCharge 
    = myCharges.OrderByDescending(x => x).Skip(1).Sum(); 

如果然后你决定你想加起来所有,但最小的两项费用(例如),你可以用一个简单的变化做到这一点:

var totalMinusSmallestTwoCharges 
    = myCharges.OrderByDescending(x => x).Skip(2).Sum(); 

我不知道你是否会被“允许”使用这个,因为这可能是一个assig市民明白。但是,LINQ在现实世界中非常有用。你可以read more about it here

0

这可能是更有趣的(​​和面向多个对象)来创建一个具有以下方法班主任:

  1. addCharge(浮充电)//从当前数据费用没有名字
  2. 浮动getTotalCharges()
  3. removeCharge(浮充电)//删除的电荷中的条目具有相同值的

如果创建一个类来表示的电荷,则可以FOC我们只需在一个地方添加或调整所有行为。然后你可以使用其他类的行为(比如你的“main”方法)。

+0

我不允许添加方法 – user3341720

1

Enumerable.Min更快(O(N))比OrderByO(N*logN)),所以如果你需要特殊的情况下,只需极小值,你可以用它:

var totalMinusSmallestCharge = myCharges.Sum() - myCharges.Min(); 
+0

刚刚提及Min! – BradleyDotNET