MyNode
オブジェクトのリストを取得することです。ただし、結果リストにはノードのみを含める必要があります。 solution
MyNode
このフラッテリングを達成するために、次のlinq式を使用できます。
group == 1
を再帰的に生成します。次に、このシーケンスを現在のノードに接続して、合併テーブルを生成します。 フィルター
ツリーが平らになったら、
<code class="language-csharp">IEnumerable<MyNode> Flatten(IEnumerable<MyNode> e) => e.SelectMany(c => Flatten(c.Elements)).Concat(e);</code>
のノードのみを選択できます。 Flatten
追加のスタイルエンハンスメント
読みやすさを向上させるために、メソッドは静的クラスの拡張関数として定義できます。
Where(...)
group == 1
実装が見つかりました
<code class="language-csharp">var result = flattenedNodes.Where(n => n.group == 1);</code>
フラットプロセスを一般化するために、一般的な拡張方法を作成できます。 このメソッドにより、各要素から子孫ノードを取得するために関数が定義されている場合、展示は階層化されたデータ構造を平らにすることができます。
この汎用タイプを実装するには、メソッドを呼び出して、対応する関数を提供して子孫を抽出します。
Flatten
以上が階層のツリー構造をLINQを使用してフラットリストに平らにする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。