我在这里使用什么数据结构?

Che*_*tah 8 c# data-structures

我有很多实例,有两个类Children,Animal它们有多对多的实体关系.

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

我需要这个数据结构是并发的,以便任何线程都可以访问它.

所以给出一个示例映射:

Child1 -> Animal1
Child1 -> Animal2
Child1 -> Animal3
Child2 -> Animal2
Child2 -> Animal3
Child3 -> Animal3
Run Code Online (Sandbox Code Playgroud)

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

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

我能想到的唯一方法是使用字典和列表中的每个项目(动物和儿童),但我还要处理锁定列表的同步,这是很麻烦的.

Mic*_*ing 7

我认为你必须将你的数据结构分成三层.

Child <- ChildToAnimalRelation -> Animal
Run Code Online (Sandbox Code Playgroud)

所以Child,Animal两者都有ChildToAnimalRelation

public class ChildToAnimalRelation 
{
    public Child Child { get; set; }
    public Animal Animal { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

获取动物儿童的方法如下:

var children = currentAnimal.ChildToAnimalRelations.Select(r => r.Child);
Run Code Online (Sandbox Code Playgroud)

反之亦然:

var animals = currentChild.ChildToAnimalRelations.Select(r => r.Animal);
Run Code Online (Sandbox Code Playgroud)