【发布时间】:2023-03-12 00:14:01
【问题描述】:
我正在尝试将家庭关系建模为图表,以便我可以查询它们以查找关联关系和其他关系。这是一个练习练习,所以我不能使用现有的解决方案,如图形数据库等。
我正在尝试模拟这样的东西,其中相关之间存在边缘 实体(人)来表示关系。
我就是这样开始的。
public class Person
{
public string Name { get; set; }
List<IEdge> Children { get; set; }
IEdge Spouse { get; set; }
IEdge Father { get; set; }
IEdge Mother { get; set; }
}
public class Edge
{
Person From { get; set; }
Person To { get; set; }
public string RelationshipType { get; set; }
}
public class Family
{
Dictionary<string, Person> familyGraph = new Dictionary<string, Person>();
}
邻接表表示将存储在一个键值对中,一个人的所有边都将存储在相应的人节点中。
因此添加与 this 的关系很简单。
现在说到检索关系,比如找出兄弟姐妹、舅舅等等。我有点不得不手动导航边缘以找到每种关系类型的合适人选。对于每一种关系,我都必须这样做。
例如,为了找到我的侄女,我将不得不遍历我的妈妈找到我的兄弟姐妹并得到他们的孩子,
为了找到我的岳母。我必须穿越到我的妻子那里找到她的妈妈。 我在想这就是代码在这个数据结构中的样子
List<string> FindNeice(string username)
{
currentPerson = GerPerson(username)
siblings = currentPerson.Mother.Children;
niece = siblings.Where(mbox => mbox.Gender == "F").SelectMany(m => m.Children);
}
所以这必须存在于每一种关系中。是的,有些可以重复使用,因为母/父关系与您和您妻子之间交换的起始人相同。
我正在考虑是否有更好的方法来对此建模以及编写提取关系的更好方法。
【问题讨论】:
标签: algorithm data-structures graph tree language-agnostic