gpt4 book ai didi

c# - 为层次结构中的实体获取父级

转载 作者:行者123 更新时间:2023-11-30 20:11:05 25 4
gpt4 key购买 nike

几天来一直在尝试解决这个问题,但没有任何进展,我的问题是:

Given an entity in a hierarchy, return a list of the immediate-ascendants (or parents) of the entity.

当我想知道“实体 1.2.2.2”的层次结构时,它会返回一个仅包含粗体项的列表:

Entity 1- Entity 1.1- Entity 1.2  - Entity 1.2.1  - Entity 1.2.2    - Entity 1.2.2.1    - Entity 1.2.2.2  - Entity 1.2.3  - Entity 1.2.4    - Entity 1.2.4.1- Entity 1.3- Entity 1.4Entity 2...

Hence, expected result:

Entity 1- Entity 1.2  - Entity 1.2.2    - Entity 1.2.2.2

Implementation code:

class Entity
{
public Entity Parent { get; set; }

public bool AbsoluteParent
{
get
{
return Parent == null;
}
}

public IEnumerable<Entity> Hierarchy //problem
{
get
{
return AbsoluteParent
? new [] { this }
: new [] { this }.Concat( Parent.Hierarchy );
}
}

}

上面的数组尝试只是我一直在尝试的选项之一,该代码实际上返回如下内容:

Entity 1Entity 1- Entity 1.2Entity 1- Entity 1.2  - Entity 1.2.2Entity 1- Entity 1.2  - Entity 1.2.2    - Entity 1.2.2.2

我能够使用 jQuery 的 parents() 函数实现预期的结果,我一直在阅读 yield return 关键字,但仍然停留在更多(我猜) 函数式风格,我还在蹒跚学步。

最佳答案

迭代器 block 是否可以接受?

public IEnumerable<Entity> Hierarchy
{
// note: buffers results
get { return UpwardHierarchy.Reverse(); }
}

public IEnumerable<Entity> UpwardHierarchy
{
get
{
// genuine lazy streaming
for (var entity = this; entity != null; entity = entity.Parent)
yield return entity;
}
}

另一种选择:使用 MoreLinq's 生成:

return MoreEnumerable.Generate(this, entity => entity.Parent)
.TakeWhile(entity => entity != null)
.Reverse();

关于c# - 为层次结构中的实体获取父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4196487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com