ラムダ式に関する簡単な質問
次のコードですべての取引の平均を取得したかった。私が使用している式は、((price 1 * qty 1+(price 2 * qty 2).... +(price n * qty n)/(qty 1 + qty 2 + ... + qty n)
次のコードでは、sum関数を使用して(price * qty)の合計を計算しており、複雑さはO(n)になり、もう一度すべてのqtyを合計すると複雑さはO(n)になります。それで、複雑さを使用して両方の合計を見つけることができる方法はありますかO(n)は、両方の結果を計算できる単一のラムダ式を意味します。
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;
}
編集:係数がカウントされないことを知っています。質問を言い換えると、ラムダではリスト内の各要素を2回調べますが、forループでは各要素を1回だけ調べます。リスト要素を2回通過する必要がないようにラムダを使用した解決策はありますか?