私はしばしば、階層オブジェクトのツリーを横断し、道に沿って各アイテムに対して操作を実行する必要があることがよくあります。この種の操作のための一般的に受け入れられている名前は、リストの理解であるか?私は、最初に覚えているから、Pythonのzip functionが、それが.netフレームワークに相当する前に覚えていて、珍しいが適切な名前を持っていると思っていたので、私は尋ねる。ここでこのタイプの列挙可能な操作に受け入れられる名前はありますか?
は、最大再帰一般化方法の、ツリー構造のダウンカップルであり、彼らが遭遇しているとして、各項目をもたらします。
public static IEnumerable<T> Ancestors<T>(T source, Func<T, T> selector)
{
do
{
yield return source;
source = selector(source);
} while (!Equals(source, default(T)));
}
public static IEnumerable<T> Descendents<T>(T source,
Func<T, IEnumerable<T>> selector)
{
var stack = new Stack<T>();
stack.Push(source);
while (stack.Count > 0)
{
source = stack.Pop();
yield return source;
var items = selector(source);
if (items != null)
{
foreach (var item in items)
{
stack.Push(item);
}
}
}
}
何らかの種類のフィルタリングされたツリートラバーサル?これが特定の名前を持っているかどうかはわかりません。私はそれがあるとは思わない。 –
2番目は深さ優先検索です。 2番目の名前には名前がありません。セレクタ関数に応じて 'Ancestors'と呼ばれますが、実際には 'parent'を実際に従う必要はありません(例えば、ノード) –
@George:まさに「祖先」とはある種の階層関係を意味します。実際には、どちらの方向にもリンクされたリストを横断したり、任意の種類の任意のトレイルに従うのと同じように簡単に使用できます。 –