从给定数组中减去最小数字

时间:2014-03-01 00:05:47

标签: c#

如果我要从帐单中删除费用(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();

5 个答案:

答案 0 :(得分:1)

Enumerable.MinO(N)OrderBy)更快(O(N*logN)),因此如果您需要特殊情况,您可以使用它:

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

答案 1 :(得分: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();

答案 2 :(得分:0)

这样的东西?

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

答案 3 :(得分:0)

如果你想加上除最小费用之外的所有费用,你可以将收费从最小到最大,然后加上除第一个(最小)之外的所有费用:

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

如果您之后决定要添加除最小的两个费用之外的所有费用(例如),您可以通过简单的更改来完成此操作:

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

我不确定你是否会被允许&#34;使用它,因为这可能是一项任务。但是,LINQ在现实世界中非常有用。你可以read more about it here

答案 4 :(得分:0)

创建一个具有以下方法的Charge类可能更有趣(也更面向对象):

  1. addCharge(浮动费用)//没有来自当前数据的名称
  2. float getTotalCharges()
  3. removeCharge(float charge)//从带有相同值的费用中删除条目
  4. 如果您创建一个类来表示费用,那么您可以专注于您想要在一个地方添加或调整的所有行为。然后,您可以使用其他类中的行为(例如“主”方法)。