我在这里用什么数据结构
本文关键字:数据结构 什么 在这里 | 更新日期: 2023-09-27 18:04:23
我有很多实例两个类Children
和Animal
有一个多对多实体关系。
我想有一个数据结构,这样给定一个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
所以Child
和Animal
都有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");
...