2014-03-01 24 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