首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA中的单数据字典

VBA中的单数据字典
EN

Stack Overflow用户
提问于 2015-06-11 11:06:01
回答 2查看 269关注 0票数 2

在我看来,这是一个简单的问题。我有一个值数组,我需要循环和删除。问题是数组只能重调(不能删除中间的元素)。

我在考虑用字典,但我不会真正使用这个值,只使用钥匙,这似乎是一种浪费…有“密钥”列表吗?

就上下文而言,我想做的是:

  1. 创建数组:{1,2,3,4,5,6,7}
  2. 从中间删除元素:例如,删除(3)= {1,2,4,5,6,7}

,就像我说的,我可以用字典,但似乎是浪费!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-11 12:01:41

我几乎从不把价值放在字典里。我只是用钥匙。不必为那事担心了。没有数据不使用内存。

这些是你的选择。

来自.NET (尽量避免这些问题,因为已经存在COM开销-- .NET开销也只是重复COM功能)

·没有固定大小的ArrayList-An数组类。您可以继续添加项目到它。 •Hashtable—This类类似于Scripting.Dictionary类。您可以添加项目并按键查找它们。 ·Queue-This是一个先进先出(FIFO)的集合。您将项目推入,然后以相同的顺序在稍后的时间读出它们。 ·Stack-A first in,last (FILO)系列。您将项目推送到堆栈上,然后按反向顺序将其弹出。 •SortedList—Similar到哈希表,除非迭代这些项时,它们总是按键排序。

请参阅https://msdn.microsoft.com/en-us/library/aa719110(v=vs.71).aspx

COM对象

您有vbscript的Scripting.Runtime的字典 (vbscript可以传递到VBA)

代码语言:javascript
运行
复制
'This dedups
Set Dict = CreateObject("Scripting.Dictionary")
On Error Resume Next
Dict.Add "Key1", "Data"
Dict.Add "Key2", "Data"
Dict.Add "Key3", "Data"
If Err.Number <> 0 then
    If LCase(Arg(1)) = "l" then
        Dict.Remove Line
        Dict.Add Line, ""
    End If
End If
For Each thing in Dict.Keys()
    Msgbox thing
Next

然后是ADO ,它可以从文件中保存和加载。

代码语言:javascript
运行
复制
'This sorts and filters
Set rs = CreateObject("ADODB.Recordset")
With rs
.Fields.Append "SortKey", 4 
.Fields.Append "Txt", 201, 5000 
.Open
.AddNew
.Fields("SortKey").value = 1
.Fields("Txt").value = "Line1"
.UpDate
.AddNew
.Fields("SortKey").value = 2
.Fields("Txt").value = "Line2"
.UpDate
.AddNew
.Fields("SortKey").value = 3
.Fields("Txt").value = "Line3"
.UpDate

'Sorting
.Sort = "SortKey ASC"

'Filtering
.filter = "Sortkey < 3"

'Writing it out
Do While not .EOF
    MsgBox .Fields("Txt").Value
    .MoveNext
Loop
票数 1
EN

Stack Overflow用户

发布于 2015-06-11 11:19:43

使用ArrayList

代码语言:javascript
运行
复制
Set myAl = CreateObject("System.Collections.ArrayList")        
myAl.Add ("The") 'Add Item
myAl.Add ("dog") 'Add Item
myAl.Remove ("dog") 'Remove an item

'An example of how to traverse the items of an ArrayList:
For Each Item In myAl
    Debug.Print Item
Next Item

您最好还是使用Dictionary,我不认为会有很多开销,不过,ArrayList数据结构可能是您要寻找的结构。

还有其他数据结构,如Hashtable、堆栈、队列,但它们似乎不太适合您的需要。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30779052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档