我想得到 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;
}
这将找到具有特定属性的对象并将其返回。
当然,我可以编写第二个通用方法并从找到的对象开始并遍历层次结构,直到父对象为空,但是......
也许有一个聪明的算法我敢问......
比我聪明的人。