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

发布于 2024-12-20 19:12:53 字数 419 浏览 1 评论 0原文

我正在尝试编写一个程序,该程序将使用一个数据结构/类,该数据结构/类将保存一个键的多个数据条目 - 这在某种程度上类似于字典,但它不是一对一而是一对多关系。我试图想出一个我可以使用的课程,但我想不出任何办法。

例如,它可能看起来像:

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

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

有什么想法吗?

编辑: 我已经弄清楚了 - 毕竟我可以使用

Dictionary<;字符串,字典<...,...> >

,我不能吗?

I am trying to write a program that would use a data structure/class that will hold multiple data entries for one key - this will be somehow similar to Dictionary but it's not one to one but one to many relation. I am trying to think of a class that I can use but I cannot figure anything out.

For instance how it may look like:

I have a parameter xValue and 3 different values in different files so i would have :

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

Any ideas ?

EDIT:
I have figured this out - After all I can use

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

, can't I ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半夏半凉 2024-12-27 19:12:53

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

Dictionary<Key, HashSet<XValue>>

您的情况。

如果您同意使用第 3 方容器,您可以从此处查找答案,例如,Wintellect PowerCollections

As there is no multiset in .NET natively, I would go for

Dictionary<Key, HashSet<XValue>>

in your case.

If you are ok with using 3rd-party containers, you can look up the answers from here, e.g., Wintellect PowerCollections.

故事与诗 2024-12-27 19:12:53

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

MSDN

表示一组键,每个键映射到一个或多个值。一个
Lookup 类似于 Dictionary。这
区别在于 Dictionary 将键映射到单个
值,而 Lookup 将键映射到集合
值。

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

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

If you do not need modify this collection after initialization and just need to do search, you can leverage built in Lookup<TKey, TElement> class, but really this would be tricky and useful in rare cases when you already have IEnumerable<> instances and would flatten it to lookup data structure, anyway this is pretty useful to keep in mind that .NET provides such intersting class.

MSDN

Represents a collection of keys each mapped to one or more values. A
Lookup<TKey, TElement> resembles a Dictionary<TKey, TValue>. The
difference is that a Dictionary<TKey, TValue> maps keys to single
values, whereas a Lookup<TKey, TElement> maps keys to collections of
values.

You can not instantiate it explicitly and just can get instance of lookup using LINQ ToLookup() method. There are major restrictions so you can use this class as lookup data structure - doing search.

There is no public constructor to create a new instance of a
Lookup. Additionally, Lookup objects
are immutable, that is, you cannot add or remove elements or keys from
a Lookup object after it has been created.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文