我可以使用哪种数据结构/类来表示一对多关系?

时间:2011-12-10 12:55:00

标签: c# data-structures one-to-many

我正在尝试编写一个程序,该程序将使用一个数据结构/类来保存一个键的多个数据条目 - 这将以某种方式类似于Dictionary,但它不是一对一,而是一对多的关系。我想要一个我可以使用的课程,但我无法解决任何问题。

例如它的样子:

我在不同的文件中有一个参数xValue和3个不同的值,所以我会:

xValue, <1.txt, 1>
xValue, <2.txt, 2>
xValue, <3.txt, 3>

有什么想法吗?

修改 我已经想到了 - 毕竟我可以使用

Dictionary< string , Dictionary<..., ... > >

不,我不能?

2 个答案:

答案 0 :(得分:3)

由于.NET本身没有多重集,我会选择

Dictionary<Key, HashSet<XValue>>

在你的情况下。

如果您可以使用第三方容器,则可以从here查找答案,例如Wintellect PowerCollections

答案 1 :(得分:1)

如果您不需要在初始化之后修改此集合并且只需要进行搜索,那么您可以利用内置的Lookup<TKey, TElement>类,但实际上这在您已经拥有{{1}的极少数情况下会非常棘手且有用实例并将其展平为查找数据结构,无论如何,要记住.NET提供这样的有趣的类是非常有用的。

MSDN

  

表示每个映射到一个或多个值的键集合。一个   IEnumerable<>类似于Lookup<TKey, TElement>。该   区别在于Dictionary<TKey, TValue>将键映射到单个   值,而Dictionary<TKey, TValue>将键映射到集合   值。

您无法显式实例化它,只能使用LINQ Lookup<TKey, TElement>方法获取查找实例。有一些主要限制,因此您可以将此类用作查找数据结构 - 进行搜索。

  

没有公共构造函数来创建a的新实例   抬头。另外,查找对象   是不可变的,也就是说,你不能添加或删除元素或键   创建后的Lookup对象。