次のコードがあります。
IEnumerable<KeyValuePair<T, double>> items =
sequence.Select(item => new KeyValuePair<T, double>(item, weight(item)));
if (items.Any(pair => pair.Value<0))
throw new ArgumentException("Item weights cannot be less than zero.");
double sum = items.Sum(pair => pair.Value);
foreach (KeyValuePair<T, double> pair in items) {...}
はどこweight
ですかFunc<T, double>
。
weight
問題は、実行される回数をできるだけ少なくしたいということです。これは、アイテムごとに最大 1 回実行する必要があることを意味します。これを配列に保存することでこれを達成できました。ただし、重みが負の値を返す場合は、実行を続行したくありません。
LINQ フレームワーク内でこれを簡単に達成する方法はありますか?