我想得到Id 51的所有祖先: 1,11,22,31,41。
我不想要一个algorythm,我首先找到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;
}
这将找到具有特定属性的对象并将其返回。
当然我可以编写第二个Generic方法并从找到的对象开始并遍历层次结构直到父级为空但是......
也许有一个聪明的算法,我敢问......
比我更聪明的人。
答案 0 :(得分:0)
一个可能的聪明的解决方法是一些规则,它告诉你在哪里找到父母的孩子。例如,在binary search trees s中查看父级时,您知道哪个子级将包含该节点。如果没有这样的规则,您将不得不复制有关祖先中子项的信息,这将重新创建已存储在树中的大部分信息。