【问题标题】:Combining multiple data types into a single unified data structure in VB.NET在 VB.NET 中将多种数据类型组合成一个统一的数据结构
【发布时间】:2012-03-16 12:20:49
【问题描述】:

在 VB.NET 中,我想创建一个复杂的数据结构,将多种类型的数据存储在类似数组的格式中(见下文)。

我正在尝试创建一个看起来像这样的数据结构:

[Name; xLoc; yLoc; zLoc; [Jagged Array]]

注意:名称需要以字符串形式标注,xLoc 等以整数形式标注。 锯齿状数组看起来像这样:

[Array1;Array2;...]

其中的每个数组如下所示:

[xVel; yVel; zVel]

注意:上述向量中的每个值都是整数。

这个包含数据的数据结构的示例可能如下所示:

[Ship1; 15; 16; 25; [[2;3;0];[5;0;7];[6;2;1]]]

基本上我想创建一个锯齿状数组,其中存储在同一结构中的多种类型的数据。 VB.NET 是否以任何方式支持这种结构?我对 VB.NET 不是很有经验,所以很可能有一种更有效的方法来构造数据,它可以在 VB 中做同样的事情。如有任何想法或批评,请随时发表评论。

【问题讨论】:

    标签: vb.net variables


    【解决方案1】:

    您可以使用System.Collections.Generic.List(Of Object),但是当您从列表中检索值时,您需要跟踪类型是什么。

    出于好奇,为什么要将不同的类型一起存储在同一个列表中?

    使用System.Collections.Generic.List

    将 x 调暗为新列表(对象)() x.Add(element) '给定一个元素,所有对象都继承自 Object x.Add(new Int32({1,2,3,4,5}) x.AddRange(array) '追加一个数组的内容 Dim retrievedValue as int32() = x(1) ' 在这里,我需要记住我存储在什么索引中的内容。

    为了方便起见,我一般不会做这种事情。您失去了类型安全性,需要隐式转换检索到的值,但如果您愿意,可以在语言中完成。

    我会考虑如何编写一个代表我正在使用的数据的类。如果一个类过于重量级,可能会有一些强类型 Dictionary() 对象共享键来分别存储 string_mapint_array_map 中的 int32() 和字符串。

    例如,Dictionary 将元素存储在 KeyValuePairs 中,可以强类型化。

    将字典调暗为新字典(字符串,列表(int32))() dict.Add('myname', new List(of Int32)({1,2,4,5,6,7})

    所以dict('myname') 检索一个强类型的 Int32 列表。

    我真的只是在黑暗中刺伤,但是您可以看到 .NET 中有几个有用的集合类。我建议阅读 System.Collections.Generic 命名空间。

    【讨论】:

    • 我需要将这些值相互关联,并且我不想跟踪一百万个单独提及的值名称。例如,上面的数据结构代表了我想要跟踪的 30 个项目。这 30 个数组中的每个元素都与其他数组相关且相关。将其视为跟踪 excel 电子表格的一种方式,其中每个数组代表表中的一行。如果有更好的解决方法,请告诉我。
    • 另外,你如何实现这个结构?
    • 嗯,所以使用字典可以创建所有一种类型的数据结构(在这种情况下为整数)并使用其字符串名称引用每个字典?这听起来完全像需要的东西。唯一的问题是,使用字典和我定义了一种存储数据的方法,因此我可以定义一个具有多个“myname”值的字典,或者每次我想要一个新的“myname”值时都需要创建一个新字典来引用到整数列表。
    • 请注意,在示例中,我将 int32 列表与字符串键相关联。如今,字典以某种形式出现在大多数语言中,可以被过度使用来代替良好的 OOP,但肯定有它们的用途。请注意,它们大多使用哈希算法进行查找,因此比纯数组慢(但更有趣)。
    • 没问题!如果我能提供帮助,我很高兴。
    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2020-08-11
    相关资源
    最近更新 更多