【问题标题】:VB.net Keyed ArrayVB.net 键控数组
【发布时间】:2015-02-05 22:26:06
【问题描述】:

我想构建一个数组,其行以字符串为键。行不需要具有相同数量的列(锯齿状数组)或在每列中都有值。我希望能够更新数组现有行中的列。

我尝试使用字典。

Dim ToolUsers as New Dictionary(Of String, Array)
Dim UserData() As String = {"", "", "", "", "", "", "", "")

Of String 允许我访问基于 String 值的任何特定行,但 Array 是一个引用类型,并且始终指向存储在 UserData 数组中的当前值,而不是一个值类型并存储Dictionary 中的数组值。

我查看了Arrays 中的Array,但它似乎不允许通过键访问现有行或允许更新现有值。

VB.net 中是否存在这样的构造?

【问题讨论】:

  • 字典应该可以工作。您需要为每个新的 Dictionary 项创建一个新数组,您不能只修改现有数组的值并期望创建一个具有不同数据的新 Dictionary 项。
  • 很难理解为什么值类型行为对你很重要。也许你忽略了 Array.Copy()。

标签: arrays vb.net string key


【解决方案1】:

你可以使用Dictionary 来实现你想要的,但是.NET 中的数组are reference types,所以你需要小心你如何填充你的字典,如果你真的想要每个数组中的不同数据,不要重复使用相同的数组物品。例如

' Create a dictionary from string to array of string
Dim x = New Dictionary(Of String, String())()
x("A") = New String() { "A1", "A2", "A3" }
' A : A1, A2, A3
x("A")(1) = "A2x"
' A : A1, A2x, A3
Dim y = New String() { "Y1", "Y2" }
x("Y1") = y ' points to same array as y
x("Y2") = DirectCast(y.Clone(), String()) ' shallow copy of y, which is OK since String is immutable
' A : A1, A2x, A3
' Y1 : Y1, Y2
' Y2 : Y1, Y2
y(0) = "Y1x"
' A : A1, A2x, A3
' Y1 : Y1x, Y2
' Y2 : Y1, Y2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多