我在这里用什么数据结构

本文关键字:数据结构 什么 在这里 | 更新日期: 2023-09-27 18:04:23

我有很多实例两个类ChildrenAnimal有一个多对多实体关系。

我想有一个数据结构,这样给定一个Children,我可以得到一个映射到它的Animal列表,反之亦然。对于任何给定的Animal,我可以得到映射到它的Children列表。

我需要这个数据结构是并发的,这样它可以被任何线程访问。

给定一个映射的例子:

Child1 -> Animal1
Child1 -> Animal2
Child1 -> Animal3
Child2 -> Animal2
Child2 -> Animal3
Child3 -> Animal3

查询Child1我希望得到一个返回列表:[ Animal1, Animal2, Animal2 ] .

查询Animal2我希望得到一个返回列表:[ Child2, Child3 ] .

我能想到的唯一方法是为字典中的每个条目(包括动物和儿童)使用一个字典和一个列表,但我还必须处理锁定列表的同步问题,这很麻烦。

我在这里用什么数据结构

我认为你应该把你的数据结构分成三层。

Child <- ChildToAnimalRelation -> Animal

所以ChildAnimal都有ChildToAnimalRelation的集合

public class ChildToAnimalRelation 
{
    public Child Child { get; set; }
    public Animal Animal { get; set; }
}

得到一个动物孩子的步骤如下:

var children = currentAnimal.ChildToAnimalRelations.Select(r => r.Child);

亦然:

var animals = currentChild.ChildToAnimalRelations.Select(r => r.Animal);

如何使用列表,然后使用Linq查询?一个可能的实现:

List<Tuple<string, string>> allItems=new ...
allItems.Add(Tuple.Create("Child1", "Animal1");
...
var child1RelatedItems=allItems.Where(entry =>entry.Item1=="Child1");
var animal1RelatedItems=allItems.Where(entry =>entry.Item2=="Animal1");
...