返回列表 上一主題 發帖

[發問] 有沒有甚麼方式可以複製物件?CreateObject("SCRIPTING.DICTIONARY")

[發問] 有沒有甚麼方式可以複製物件?CreateObject("SCRIPTING.DICTIONARY")

例如CreateObject("SCRIPTING.DICTIONARY") 物件
已經輸入了一萬個key值

但我在實際應用的時候必須要用remove功能
導致再次比對的時候
我需要重新removeall
然後再輸入一萬筆key值
才可以重新執行

如果可以像陣列一樣複製直接a=b(程式執行速度就快了)

我試過Set D = CreateObject("SCRIPTING.DICTIONARY")
然後a=D 結果失敗
也試過Set a =D
結果a就真的等於D,D也被remove掉了

求大大們有方法嗎?
此目的是為了執行速度更快
PKKO

回復 2# ikboy


    可以用多個字典
但我的需求是因為,假設要將1~1萬輸入到字典內
remove之後就沒有完整的字典
又要再輸入一次

再輸入一次跟輸入多個字典是一樣的意思

當程式需要執行上百萬次的時候
光是將1~1萬輸入至物件,就花了很多時間了
若有方式可以複製就完美了!
PKKO

TOP

本帖最後由 PKKO 於 2016-8-10 12:36 編輯

回復 5# GBKEE

抱歉,小弟沒有說明清楚導致各位的困擾,小弟的問題如下
  1. Sub main_flow()
  2. OK = 0
  3. Do While OK < 5
  4.     '每次重新開始的時候,都需要將1萬個號碼輸入至物件內
  5. fn: Set XD = CreateObject("SCRIPTING.DICTIONARY")
  6.     For J = 1 To 10000
  7.         XD(J) = Empty
  8.     Next
  9.     'rng為一個不斷變動的2維陣列
  10.     '這邊開始比對所有條件,將重複的資料移除掉
  11.     For I = 1 To UBound(rng, 2)
  12.         For Each E In XD.KEYS
  13.                 If rng(i, E) = True Then XD.Remove (E)
  14.                 if xd.count<9 then goto fn
  15.         Next
  16.     Next
  17.     if xd.count=9 then call output(xd)
  18. Loop
  19. End Sub
複製代碼
目的是要找出剩餘沒出現的數字,剛好=9個,但此動作卻要每次都要重新輸入一次字典物件一萬個數字
若不用移除的方式,跑固定的迴圈反而會花更多的時間,因為有可能執行了一千多次之後,XD.count只剩下十幾個數字,沒必要跑全部的迴圈
PKKO

TOP

回復 8# 准提部林


    准大您好
因該是我說明不清楚
其實我的需求是
找出五組rng陣列(1 to 200,1 to 10000)的陣列
裡面剛好只有9991個數字,剩下9個沒有數字沒有出現過
但若要掃過rng陣列的每一個資料,就太耗時

所以我才會要用remove的功能,符合就不在比對
而rng陣列是事前就已經整理好了,他會將數字rng(1,1)=1 ,  rng(1,1000)=1000,rng(1,2000)=2000
rng(x,y)=>y=多少就=多少
PKKO

TOP

回復 8# 准提部林


    因為小弟愚蠢的認為後面的流程因該無法更加快速了,所以才沒有說明完整的流程,只有問前端的字典部分
深感抱歉

因為後面的流程,他一但剩餘沒出現的數字小於9個數字,我就直接跳過了
所以有時候一個二維陣列只跑兩三列就已經跳過了
PKKO

TOP

回復 11# GBKEE


    感謝超版大大,我試試看^_^
PKKO

TOP

        靜思自在 : 一個人的快樂.不是因為他擁有得多,而是因為他計較得少。
返回列表 上一主題