gpt4 book ai didi

arrays - 如何创建可 for 循环的已分配但零长度数组?

转载 作者:行者123 更新时间:2023-12-02 19:00:51 25 4
gpt4 key购买 nike

我想创建一个包含零个元素但可 for 循环的 VBA 数组。
您可以查看下面的代码来了解我的意思:

Sub testloopemptyarr()    
Dim spl() As String, v As Variant, count As Integer
spl = Split(Empty, ",") 'lbound=0, ubound=-1, zero elements
'ReDim spl(-1 To -1) ' one element
'ReDim spl(-1) ' does not compile: subscript out of range
'ReDim spl(-1 To 0) ' two elements
'ReDim spl(0 To -1) ' does not compile: subscript out of range

For Each v In spl
count = count + 1
Next
MsgBox count
End Sub

在这种情况下,msgbox 将弹出 0,因为拆分空字符串将返回零元素数组。遇到for循环时没有抛出错误,这意味着该数组是一个已分配的数组。

测试一下可以发现,调用Split()后,lbound(spl)为0,ubound(spl)为-1但执行 ReDim spl(0 To -1) 是非法的(尝试取消注释该行并运行)

所以我的问题是:

How do I create an array that has the same behavior with the one produced by the Split() function?

最佳答案

我很想知道您是否可以分配一个空数组。虽然我认为这是不可能的(在我看来,数组的全部意义在于其中至少有 1 个元素),而不是使用 Split 检索数组的方式。

您可能对数组的替代方案感兴趣,因为您可以使用 ArrayList 对象。 ArrayList 仍然允许您像分配的数组一样向每个索引号的“数组”添加一个项目。

Sub EmptyArray()

Dim arr As Object: Set arr = CreateObject("System.Collections.ArrayList")
Dim item As Variant

Debug.Print arr.Count 'Will show 0

For Each item In arr 'Will skip iteration
Debug.Print item
Next item

arr.Insert 0, "1st item"
arr.Insert 1, "2nd item"
arr.Insert 2, "3rd item"

Debug.Print arr.Count 'Will show 3

For Each item In arr 'Will now iterate
Debug.Print item
Next item

End Sub

关于arrays - 如何创建可 for 循环的已分配但零长度数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58471423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com