清空字符串数组的最佳方法是什么?

20

清空一个字符串数组的最佳方法是什么?

8个回答

39

错误的方法:

myArray = Nothing 

只是将指向数组的变量设置为 null,但并没有真正地清空数组。任何指向同一数组的其他变量仍将保留该值。因此,有必要清空整个数组。

正确的方式:

Array.Clear(myArray,0,myArray.Length)

为Cerebrus慢慢鼓掌,这使得它变得更易理解 :) - TheTXI
6
这并不会清空数组 - 它只是将变量设置为"无"。任何其他引用相同数组的内容仍会看到现有的值。 - Jon Skeet
谢谢...我已经使用了Array.clear,但是有些东西告诉我还有更高效的简写方式...这不是世界末日的事情,但真的很烦人,正好是午餐时间。 - spacemonkeys

7
当然,还有一种使用Erase关键字的VB方法:
Dim arr() as String = {"a","b","c"}
Erase arr

4
支持VBism,但不幸的是,“Erase”被记录为与只将变量设置为“Nothing”相同。它不能清除数组。 - Mark Hurd

2

根据您的需求:

  • 不分配任何内容(null)
  • 分配一个新的(空的)数组
  • Array.Clear

最后一种可能是最慢的,但如果您不想要一个新的数组,那么这是唯一的选择。


2
如果你需要像清除这样的操作,可能需要使用List(Of String)这样的集合,而不是数组。

好观点,但是现有的数组...不能在一个命令中将字符串拆分为字符串列表,你能吗? - spacemonkeys
不过,您可以在 String.Split 的结果上调用 .ToList()。 - Joel Coehoorn

1

redim arr(1,1,1,1) 然后 redim (z,x,y,v) 根据你的需求调整数组维度


1
这是我用来清空字符串数组内容的简单调用方式:
Public Sub ClearArray(ByRef StrArray As String())
    For iK As Int16 = 0 To StrArray.Length - 1
        StrArray(iK) = ""
    Next
End Sub

然后只需使用以下命令调用它:
ClearArray(myLocalArray)

0

如果您需要使用空字符串或其他不等于Nothing/Null的值重新初始化,您可以使用扩展方法进一步操作:

Option Strict On : Option Explicit On : Option Infer On
...
Public Delegate Sub ArrayForAllDelegate(Of T)(ByRef message As T)
<Extension>
Public Function ForAll(Of T)(ByRef self As T(), f As ArrayForAllDelegate(Of T)) As T()
    Dim i = 0
    While i < self.Length
        f(self(i))
        i += 1
    End While
    Return self
End Function

然后是你的初始化代码:

Dim a = New String(3 - 1) {"a", "b", "c"}
...
a.ForAll(Sub(ByRef el) el = "") 'reinitialize the array with actual empty strings

0
我使用这段代码:
Redim myarray(-1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接