关于 lambda 表达式的一个简单问题
我想在以下代码中获得所有交易的平均值。我使用的公式是 ((price 1*qty 1+(price 2*qty 2)....+(price n*qty n)/(qty 1+qty 2+...+qty n)
在下面的代码中,我使用 sum 函数来计算 (price*qty) 的总和,复杂度将为 O(n),再一次将所有数量相加,复杂度将为 O(n)。那么,有什么方法可以找到两者的总和,使用复杂度 O(n) 意味着可以计算两个结果的单个 lambda 表达式。
使用 for 循环,我可以计算 O(n) 复杂度的两个结果。
class Program
{
static void Main(string[] args)
{
List<Trade> trades = new List<Trade>()
{
new Trade() {price=2,qty=2},
new Trade() {price=3,qty=3}
};
///using lambda
int price = trades.Sum(x => x.price * x.qty);
int qty = trades.Sum(x => x.qty);
///using for loop
int totalPriceQty=0, totalQty=0;
for (int i = 0; i < trades.Count; ++i)
{
totalPriceQty += trades[i].price * trades[i].qty;
totalQty += trades[i].qty;
}
Console.WriteLine("Average {0}", qty != 0 ? price / qty : 0);
Console.Read();
}
}
class Trade
{
public int price;
public int qty;
}
编辑:我知道系数不计算在内。让我重新表述这个问题,说使用 lambda 我们将遍历列表中的每个元素两次,而使用 for 循环我们将只遍历每个元素一次。有没有 lambda 的解决方案,所以它不必遍历列表元素两次?