gpt4 book ai didi

C# 多对多关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:11 24 4
gpt4 key购买 nike

所以,我需要一些方法在 C# 中实现无向网络(我认为这是正确的术语)

假设我有以下数据:

Foo1 <-> Bar1
Foo2 <-> Bar1
Foo2 <-> Bar2
Foo2 <-> Bar3
Foo3 <-> Bar2
Foo3 <-> Bar3

我将如何实现可以支持这一点的东西?

一种方法是创建一个包含一个 Foo 和一个 Bar 的类,对于我的示例,我有 6 个这样的类,每种可能的组合,但是这会使数据加倍。

有了这些数据,我需要能够根据 Foo1 也指向多少个 Bar,以及 Foo 和 Bar 的点有多少等等,对 Foo1 执行计算。

我不是在寻找答案,我更想知道如何实现这个问题的一些方向,甚至可能是几个链接。

最佳答案

您基本上已经概述了一个图形模型,传统上将其视为“节点”和“边”。但是证券/贷款有效。

对于这类事情有两个经典的答案。

这取决于您希望能够对您的数据提出哪些问题、您希望存储数据的效率如何以及数据的密度。

如果,比如说,证券和贷款之间存在 30% 的可能关系,那么密集的数据结构肯定会奏效。只需保留一个大矩阵:X 上的证券。Y 上的贷款。(X,Y) 表示贷款存在。

如果集合不是很密集,那么您开始使用“稀疏边缘数据结构”。根据您的应用,您可能会:

  1. 任何 S 对象都有其 Ls 的列表。{ S->L,L,L; S->L; S->L,L,L}。真的很容易找到 S 的邻居,但很难找到 L 的邻居

  2. S 对象有 Ls 的列表,Ls 有 S 的列表:(S->L,L,L and L->S,S,S)。使用更多空间,但为您提供双向查询。

  3. 仅存储一组 (S,L) 对。非常糟糕,除非你主要需要问“这个 S 和那个 L 是否相关?”

  4. 存储S,LL,S 的列表并以某种方式对其进行索引。这就是我们所说的“让您的数据库完成工作”的意思。

另见 Data structure for relationships

关于C# 多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1376662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com