Id 51 のすべての先祖を取得したい: 1,11,22,31,41.
最初に ID 51 のオブジェクトを見つけてから、親階層を上にトラバースするアルゴリズムは必要ありません。
階層を再帰的に下って、すべての祖先を取得したいと考えています。
しかし、私はそのようにゲームが正しくプレイされていないと思いますか?祖先を取得できるたびに、次の子が ID 52 であるかどうかを知ることができないためです。巧妙な回避策はありますか?
1
-11
-21
-22
-31
-41
-51
-32
-33
-23
-12
-13
アップデート
@Jim Mischel は、オブジェクトを見つけてそのコードを表示する方法を尋ねました。
public static T FindChild<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> selectorChildrenProperty, Predicate<T> condition) where T : class {
if(source == default(T)) {
throw new ArgumentNullException("source");
}
T t = default(T);
foreach(T item in source) {
if(condition(item)) {
t = item;
break;
}
else {
t = selectorChildrenProperty(item).FindInHierarchy<T>(selectorChildrenProperty, condition);
if(!Equals(t, default(T))) {
break;
}
}
}
return t;
}
これは、特定のプロパティを持つオブジェクトを見つけて返します。
もちろん、2 番目のジェネリック メソッドを記述して、見つかったオブジェクトから開始し、親が null になるまで階層をトラバースすることもできますが...
あえて頼む賢いアルゴリズムがあるかもしれません...
私より賢い人。