Объединение нескольких типов данных в единую унифицированную структуру данных в VB.NET - PullRequest
1 голос
/ 16 марта 2012

В VB.NET я хотел бы создать сложную структуру данных с несколькими типами данных, хранящихся в массиве, подобном формату (см. Ниже).

Я пытаюсь создать структуру данных, которая бы выглядела как-токак это:

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

Примечание: имя должно быть измерено как строка, xLoc и т. д. как целые числа.Jagged Array будет выглядеть следующим образом:

[Array1;Array2;...]

Каждый из массивов будет выглядеть следующим образом:

[xVel; yVel; zVel]

Примечание. Каждое значение в вышеуказанном векторе будет целым числом.

Пример этой структуры данных с данными в ней может выглядеть следующим образом:

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

По сути, я хочу создать зубчатый массив с несколькими типами данных, хранящихся в одной структуре.Поддерживает ли VB.NET такую ​​структуру?Я не очень разбираюсь в VB.NET, поэтому вполне может быть гораздо более эффективный способ структурирования данных, который бы делал то же самое в VB.Пожалуйста, не стесняйтесь комментировать любые идеи или критические замечания.

1 Ответ

2 голосов
/ 16 марта 2012

Вы можете использовать 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_map и int_array_map соответственно.

Например, Словарь хранит элементы в 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.

IНа самом деле я просто в темноте, но вы можете видеть, что в .NET есть несколько полезных классов коллекций.Я бы порекомендовал прочитать в пространство имен System.Collections.Generic.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...