【问题标题】:Strongly Typed Multidimensional Array/Collection强类型多维数组/集合
【发布时间】:2012-06-08 18:15:02
【问题描述】:

我想从数据库中创建一个包含以下值的强类型多维数组或集合:

  • 文件名(作为字符串)
  • 文件大小(作为整数)

要求:

  • 可通过索引访问(例如 Arr(i)(j)、Arr.Row(i) 等)
  • 高效(即快速且不占用资源)
  • 易于操作、添加、附加等。
  • .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

【问题讨论】:

  • 鉴于 cmets,我选择使用 Structure 而不是类,因为它的实现比带有 PropertiesClass 更简洁。我将在我原来的问题下方发布一个示例。
  • O.o 非常棒的知识。你每天都会学到一些东西。谢谢@MarkJ! :) 现在结构根据定义是可变的吗?还是可以使它们不可变?我是干净代码的忠实粉丝。 :)

标签: vb.net multidimensional-array strongly-typed-dataset


【解决方案1】:

你不能有一个包含两种不同类型的多维数组。

相反,您通常会使用您的数据创建一个包含自定义类的一维数组(或 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

【讨论】:

  • O.o 现在这是一个美味的答案。工作到凌晨 3 点,所以有点脑筋急转弯,谢谢! ;)
  • 您好@ReedCopsey,如果我将代表交给卡皮尔,您会非常介意,因为他的代表较少,而且他的回答非常相似且很有帮助?
  • @Chiramisu 接受您喜欢的任何答案 ;) 这对我来说很好 - 一般来说,选择您认为对您最有帮助或最好的答案,无论声誉如何(这在宏伟的计划)
  • 你说得对,虽然我希望有足够的代表来添加标签:P...不过,我确实喜欢你关于访问项目的示例,这很有帮助。谢谢。 ;)
  • @Chiramisu 我相信它会很快到来 - 继续提问,更重要的是,回答问题 ;) (顺便说一句 - 我也投票支持 Kapil 的答案 - 如果你选择,我会找到他的)
【解决方案2】:

您可以使用通用列表集合:

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

现在你可以有一个列表:

Dim MyItems AS List(Of MyItem)

【讨论】:

    【解决方案3】:

    请记住,虽然它不是强类型的,但 HashTable 类在存储和检索大量数据方面表现最好。如果 FileName 是唯一的,那将是您的密钥。此外,您可以将哈希表包装在另一个类中,并提供用于添加和检索的强类型方法。

    根据对this SO 帖子的回答,Dictionary(of T) 提供了哈希表的通用实现。可能值得研究。

    【讨论】:

      【解决方案4】:

      让我们保持超级简单。我真的不喜欢程序员让事情变得比他们需要的更复杂。

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

      如果您愿意,可以将其从“对象”更改为“字符串”。

      【讨论】:

        猜你喜欢
        • 2010-09-16
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多