在 C# 中将结构类型存储在列表或字典中

Posted

技术标签:

【中文标题】在 C# 中将结构类型存储在列表或字典中【英文标题】:storing struct type in a list or dictionary in c# 【发布时间】:2021-08-09 16:30:32 【问题描述】:

我在 C# 中有现有的遗留代码,我们将结构类型存储在 memlib 类型中,然后创建 3 个键以更快地访问 memlib 结构。请看下面的快照:

public struct gtBuildRecType : ICloneable
    
        public double dParentLocCd; //   8 bytes : Key1
        public double dLocationCd; //   8 bytes : Key2
        public int lHierLevel; //   4 bytes : Key3
        public int lSequence;
        public int lDupChecked;
        public int nStatusInd;
    

Memlib 记录和 3 个键的定义如下:

    static public Memlib<gtBuildRecType> gnBuildTable = null;
    static public Key<gtBuildRecType> gnBuildParentCdKey = null;
    static public Key<gtBuildRecType> gnBuildLocCdKey = null;
    static public Key<gtBuildRecType> gnBuildHierLevelKey = null;

现在,gnBuildTable Memlib 可以包含数千条结构记录,我们可以使用 3 个键中的任何一个,即 gnBuildParentCdKey、gnBuildLocCdKey、gnBuildHierLevelKey 来加快访问速度。例如:

gtBuildRecType uTempRec = gtBuildRecType.CreateInstance();
MemLibStatus nReturn = gnBuildTable.ReadEqual(gnBuildParentCdKey, ref uTempRec);

这段代码将立即填充 gnBuildTable 中的 uTempRec,其中 gnBuildParentCdKey 匹配 gnBuildTable 中的结构记录strong> 然后我们可以相应地更新 uTempRec 并保存更改。

现在,我的问题是:我想用 List 或 Dictionary 替换 Memlib。我想将这数千条结构记录存储在 List 或 Dictionary 中,但我应该如何使用 List 或 Dictionary 实现 3 键方法,以便我的搜索变得更快????我从列表开始(不使用任何键),但在中途我遇到了在列表中搜索准确结构记录的问题。

我最初也尝试过使用单键的字典方法,但我也遇到了问题。

提前致谢:-)

【问题讨论】:

您如何存储数据?最好将存储保留为结构,然后在读取文件后创建字典。 @jdweng 从后端检索数据,返回的每一行都存储在 struct 中,而 struct 又存储在 Memlib 中。即使创建字典也会导致问题,因为现有设计有 3 个键,而字典最多只有 1 个键。 如果问题描述了您实际尝试做的事情、您尝试过的事情、结果以及您的期望会更有用。目前您正在描述您是如何使用库的,因此如果不熟悉确切的库就很难回答。 我会不理会所有内容,只需添加字典以加快进程。您应该有一个 List 可用于创建字典。所以字典是 List myList = new List(); Dictionary dict = myList.GroupBy(x => x.dParentLocCd).ToDictionary(x => x.Key, y => y.FirstOrDefault());如果每个键有多个项目,则: Dictionary> dict = myList.GroupBy(x => x.dParentLocCd).ToDictionary(x => x.Key, y => y.ToList() ); 我遇到了用于 C# 的 boost.multiindex 组件,这可能会使我的任务更轻松。 【参考方案1】:

好吧,为了解决这个问题,我可以使用多索引 3rd 方库,也可以通过 DataTable 工作。将结构体的字段作为数据表中的列。

【讨论】:

以上是关于在 C# 中将结构类型存储在列表或字典中的主要内容,如果未能解决你的问题,请参考以下文章

数据结构中的列表元组字典集合

数据结构

day40 数据结构-算法

Python基础之数据结构

数据结构

如何在 C# 中将列表或数组转换为子类型?