これをよりわかりやすい方法で実行するにはどうすればよいですか?LINQを使って2 foreachを簡略化するにはどうすればよいですか?
答えて
簡略化したいですか?どうして?シンプルでわかりやすく理解できます。あなたはより硬いであるが、確かによりクールに見えるすべての種類のゴブリンジグックを考え出すことができる。しない!思い切った衝動に抵抗してください。
これです。また、時間がかからない "最適化"時間を夢中にしないでください。おそらく、LINQ文を何にしようとしているのを見て、もっと時間を費やしたでしょうか?何の利益? – Fourth
これは私が推薦するものです。あなたがここで何をしているのかを理解することは簡単です。私の答えでは必ずしもそうではありません(少なくとも最初のバージョンでは)。場合によっては、コードの可読性や将来のメンテナンス性が向上する場合もあります。 – SPFiredrake
return
from actual in actualProjections
from projection in projections
select Create(book, actual, projection)
.With_TargetNett(projection.DailyProjectedNet.ToString());
With_TargetNettが拡張子ですあなたが行うことができます
static Position With_TargetNett(this Position position, string targetNett)
{
position.TargetNett = targetNett;
return position;
}
これは彼が望んでいるものですが、彼が元々書いたものが5行を取り、これは5 + 3を要することに注意してください。とにかく、思考の時間をとるため+1。 –
1つのオプションは、あなた自身のクロス結合を実装し、その上で列挙することです。しかし、それは非常にきれいまだありません。
actualPositions.SelectMany(actual => projections.Select(project => new { actual, project }))
しかし、あなたは.NET 4.0以降を使用している場合、あなたはクロスタプル(デフォルト)または独自のカスタムセレクタを使用して拡張メソッドに参加実装できます。
public static IEnumerable<Tuple<T1, T2>> CrossJoin<T1, T2>(this IEnumerable<T1> source, IEnumerable<T2> toJoin)
{
return source.CrossJoin(toJoin, Tuple.Create<T1, T2>);
}
public static IEnumerable<T3> CrossJoin<T1, T2, T3>(this IEnumerable<T1> source, IEnumerable<T2> toJoin, Func<T1, T2, T3> selector)
{
return source.SelectMany(tFirst => toJoin.Select(tSecond => selector(tFirst, tSecond)));
}
そして、これは非常に簡単に使用することができます。
foreach(var pair in actualPositions.CrossJoin(projections))
{
var position = Create(book, pair.Item1, pair.Item2);
position.TargetNett = pair.Item2.DailyProjectedNet.ToString();
yield return position;
}
// OR
return actionPositions.CrossJoin(projections, (actual, project) => { /*Code in foreach loop above here, without the "yield". */ });
だけで楽しい
return
(
from actual in actualProjections
from projection in projections
select new {actual, projection}
).Select(pair =>
{
var position = Create(book, pair.actual, pair.projection);
position.TargetNett = pair.projection.DailyProjectedNet.ToString();
return position;
}
);
のために
この場合、Linqは読みやすさが低下します。 あなたが別々の方法で二foreach文を移動して、新しいメソッドにLINQ
return from actual in actualPositions
select GetBookPositionList(actual);
を使用することができます。
private List<BookPosition> GetBookPositionList(ActualPosition actual)
{
foreach (var projection in projections)
{
var position = Create(book, actual, projection);
position.TargetNett = projection.DailyProjectedNet.ToString();
yield return position;
}
}
- 1. Javaコードを簡略化するにはどうすればよいですか?
- 2. SQL - この簡単なクエリを簡略化するにはどうすればよいですか?
- 3. どうすればforループを簡略化できますか?
- 4. linqクエリを簡略化しますか?
- 5. これらのコードを簡略化するにはどうすればよいですか?
- 6. プロットをノードに変換するにはどうすればよいですか? (表現の簡略化)
- 7. OracleでこのSQLクエリを簡略化するにはどうすればよいですか?
- 8. コードを効率的に簡略化するにはどうすればよいですか?
- 9. このCSSをSASSで簡略化するにはどうすればよいですか?
- 10. このOpenCLカーネルコードを簡略化するにはどうすればよいですか?
- 11. このスプレッドシート式を簡略化するにはどうすればよいですか?
- 12. 角度材料ダイアログの使用を簡略化するにはどうすればいいですか?
- 13. .htaccessでURLを簡略化するにはどうすればよいですか?
- 14. このJavaスプラッシュ画面を簡略化するにはどうすればよいですか?
- 15. この配列フィルタ式を簡略化するにはどうすればよいですか?
- 16. 簡略化es6スニペットforEach
- 17. このクエリを簡略化するにはどうすればよいですか?
- 18. この選択機能を簡略化するにはどうすればよいですか?
- 19. ブーストバリアントのプラスアクションを簡略化するにはどうすればよいですか?
- 20. 複数の列の削除を簡略化するにはどうすればよいですか?
- 21. クエリ出力を簡略化するにはどうすればよいですか?
- 22. このMySQLクエリのパフォーマンスを簡略化/改善するにはどうすればよいですか?
- 23. このAddClass/RemoveClassコードを簡略化するにはどうすればよいですか?
- 24. このD3コードを簡略化するにはどうすればよいですか?
- 25. 妥当性チェックコードを簡略化するにはどうすればよいですか?
- 26. UMLクラス図の継承表記を簡略化するにはどうすればよいですか?
- 27. 次のDAX文を簡略化するにはどうすればよいですか?
- 28. 変換時のforeachの簡略化
- 29. このように簡略化されたif/else文を使うのは間違っていますか?
- 30. Pythonを使って簡単な入力を量子化するにはどうすればいいですか
「より良い」を定義します。読みやすさ?パフォーマンス?他に何か? – Oded
'actionPositions'と' projections'は何らかの形で関連していますか? –
私によく見えます。 – asawyer