私は、惑星とその月を含むコレクションを子コレクションとして持っています。
コレクションですが、実際はツリーのような構造を表しています。私は簡単に2つのツリーレベルしか表示していませんが、各惑星や月にはさらに化学元素の集合が存在する可能性があるので、単純化のために2レベルのツリーを使用します。ラムダ式(または他の方法)でコレクションを検索する
Mercury
Venus
Mars
- Deimos
- Phobos
Jupiter
- Europa
- Ganymede
- Io
私はちょうど私がその名前に「M」を含む各項目に対して、このリストを検索したい
var myList = myCollection.Values.ToList();
を使用し、リストにこのコレクションを変換する方法を知っています。親の名前に "m"がなくて子どもの月がある場合、その子(月)とその親(惑星)を含めたいと思います。木星の場合、私は木星とガニメデの両方を私のリストに入れます。
ため、以下のリストを返すだろう「M」のための私の検索
{水星、火星、ダイモス、木星、ガニメデ}
同上このため、ラムダを使用して好むが、そうする必要はありません
UPDATE:構造
BodyNode
-ID [Guid]
-Name [string]
-IsChild [bool]
-Parent [BodyNode]
-Children[BodyList ObservableCollection of BodyNode]
BodyTreeNode : BodyNode
-Expanded [bool]
-Selected [bool]
-Enabled [bool]
ツリーを検索するのに 'DFS'を使用し、名前に 'm'が含まれている場合はリストに追加します。 – dcg
大文字小文字を区別しない比較を行う場合は、['node.Name.IndexOf(" m "、StringComparison.OrdinalIgnoreCase)> -1']を使用してください。(https://msdn.microsoft.com/en-us/library/ms224425 ToUpper/ToLowerと['Contains']の組み合わせ(https://msdn.microsoft.com/en-us/library/dy85x1sa(v = 1.10%))の代わりに、 vs.110).aspx)を参照してください。 'public static bool(この文字列のソース、文字列の値、StringComparisonの比較)=> source.IndexOf(値、比較)> -1;'忘れずに拡張メソッドを作ることができます。引数の検証。 – Johnbot