在我看来,这是一个简单的问题。我有一个值数组,我需要循环和删除。问题是数组只能重调(不能删除中间的元素)。
我在考虑用字典,但我不会真正使用这个值,只使用钥匙,这似乎是一种浪费…有“密钥”列表吗?
就上下文而言,我想做的是:
{1,2,3,4,5,6,7}{1,2,4,5,6,7},就像我说的,我可以用字典,但似乎是浪费!
发布于 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)
'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 ,它可以从文件中保存和加载。
'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发布于 2015-06-11 11:19:43
使用ArrayList:
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、堆栈、队列,但它们似乎不太适合您的需要。
https://stackoverflow.com/questions/30779052
复制相似问题