如果我要从帐单中删除费用(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();
答案 0 :(得分:1)
Enumerable.Min
比O(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类可能更有趣(也更面向对象):
如果您创建一个类来表示费用,那么您可以专注于您想要在一个地方添加或调整的所有行为。然后,您可以使用其他类中的行为(例如“主”方法)。