在VB.NET中将多种数据类型组合成一个统一的数据结构

时间:2012-03-16 03:23:05

标签: vb.net variables

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

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

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

注意:名称需要标注为字符串,xLoc等为整数。 Jagged数组看起来像这样:

[Array1;Array2;...]

内部的每个数组看起来像:

[xVel; yVel; zVel]

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

使用System.Collections.Generic.List

Dim x as new List(of Object)()

x.Add(element) 'given an element, all objects inherit from Object
x.Add(new Int32({1,2,3,4,5})
x.AddRange(array) 'append an array's contents

Dim retrievedValue as int32() = x(1) ' here, I needed to remember what I stored at what indice.

为了让事情变得简单,我通常不会做这种事情。您丢失了类型安全性并需要隐式转换检索到的值,但如果您愿意,可以使用该语言完成。

我会考虑如何编写一个代表我正在使用的数据的类。如果一个类太重了,可能会有几个强类型的Dictionary()对象共享密钥来存储分别说明int32()和string_mapint_array_map中的字符串。

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

Dim dict as new Dictionary(of string, List(of int32))()
dict.Add('myname', new List(of Int32)({1,2,4,5,6,7})

因此dict('myname')检索强类型的Int32列表。

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