2

Я хочу создать строго типизированный многомерный массив или коллекцию, содержащую следующие значения из базы данных:Сильно типизированных многомерный массив/Коллекция

  • FileName (As String)
  • FileSize (As Integer)

Требования:

  • Доступ через индекс (например, Arr (я) (к), Arr.Row (я), и т.д.)
  • Эффективный (т.е. быстрый & не ресурсоемкими)
  • легко манипулировать, в дополнение к, добавляется и т.д.
  • .NET 3.5 совместимый

Спасибо большое за ответы всем. Вот что я пошел с ... :)

Structure FileRecord 
    Dim Name As String 
    Dim Size As Integer 

    Sub New(ByVal FileName As String, ByVal FileSize As Integer) 
     Me.Name = FileName 
     Me.Size = FileSize 
    End Sub 
    Sub New(ByVal Files() As FileRecord) 
     For Each f As FileRecord In Files 
      Dim fr As New FileRecord(f.Name, f.Size) 
     Next 
    End Sub 
End Structure 
+0

В свете комментариев я решил перейти с «структурой» вместо класса, поскольку он имеет более чистую реализацию, чем «класс» с «свойствами». Я отправлю образец ниже моего первоначального вопроса. – Chiramisu

+1

[Не используйте изменяемую структуру!] (Http://stackoverflow.com/q/441309) – MarkJ

+0

О.o Отличная часть знаний. Вы узнаете что-то каждый день. Спасибо @MarkJ! :) Теперь структуры поменяются по определению? Или они могут стать неизменными? Я большой поклонник чистого кода. :) – Chiramisu

ответ

4

Вы не можете иметь многомерный массив, содержащий два отдельных типа.

Вместо этого вы обычно делаете одномерный массив (или List(Of T)), содержащий пользовательский класс с вашими данными.

В вашем случае, вы можете что-то вроде:

Public Class FileRecord 
    Public Property Name As String 
    Public Property Size as Integer 
End Class 

Затем сделайте List(Of FileRecord) для хранения данных. Вы бы тогда быть в состоянии получить доступ к этому, как:

Dim nameAtIndex = theList(i).Name 
Dim sizeAtIndex = theList(i).Size 
+0

O.o теперь это потрясающий ответ. Работал до 3 утра, поэтому маленький мозг жарился, спасибо! ;) – Chiramisu

+0

Здравствуйте, @ReedCopsey, ты не против, если бы я отдал репутацию Капилю, так как у него меньше репутации, и его ответ был очень похож и полезен? – Chiramisu

+0

@Chiramisu Принимайте любой ответ, который вы предпочитаете;) Все в порядке со мной - в общем, выберите ответ, который вам кажется самым лучшим или лучшим, независимо от репутации (что действительно не имеет значения в великой схеме вещей) –

3

Вы можете использовать общий сбор список:

Public Class MyItem 
    Public Property FileName As String 
    Public Property FileSize As Integer 
End Class 

Теперь вы можете иметь список:

Dim MyItems AS List(Of MyItem) 
1

Имейте в виду, что в то время как он не сильно типизированных, то HashTable класс выполняет лучше для хранения и извлечения больших объемов данных. Если FileName уникален, это будет вашим ключом. Кроме того, вы можете обернуть хеш-таблицу в другом классе и предоставить строго типизированные методы для добавления и извлечения.

В соответствии с ответом this SO post, Dictionary(of T) предоставляет общую реализацию хэш-таблицы. Может быть стоит посмотреть.

0

Будем держать его SUPER SIMPLE. Мне очень не нравится, когда программисты делают вещи более сложными, чем они должны быть.

Dim Multi_Dimensional_Array As Object(,) = _ 
     {{"Item 1", "1", "2", "3", "4", "5"}, 
     {"Item 2", "6", "7", "8", 9"", "No More Items"}} 

Вы можете изменить его с «Объект» на «Строка», если вы выберете.

Смежные вопросы