2015-09-08 42 views
1

所以,我有在Excel中的一個字分析程序,使用它我希望能夠導入超過30萬字。在字符串中隱藏變量VS使用具有屬性的對象?

起初,我創建了一個單獨的對象爲每個這些話,讓每個字都有一個...

.value '(string), the actual word itself 
.bool1 '(boolean) 
.bool2 '(boolean) 
.bool3 '(boolean) 
.isUsed '(boolean) 
.cancel '(boolean) 

當我發現我可能還有30萬個這樣的對象(所有存儲在單一收藏),我認爲這可能是一個怪物編譯。所以我決定我所有的單詞都是字符串,並且我會將它們粘貼到一個數組中。

所以我的陣列的想法是通過在每個字符串的開頭加入5位(我的5個布爾變量),代表一個假布爾VAL每個空的空間,每個追加3000萬串。例如,

If instr(3, arr(n), " ") = 1 then 
'my 3rd bool val is false. 
Elseif instr(3, arr(n), "*") = 1 then '(I'll insert a '*' to denote true) 
'my third bool val is true. 
End If 

無論如何,你們認爲什麼?我應該採用哪種方式(集合或數組)(專門針對優化)?

+0

我建議你使用Excel以外的東西 – user2182349

+0

啊,我一般對編程很新,但這不能在Excel中完成?老實說,如果我需要爲了完成操作,我可以將電腦開着幾天。我從來沒有真正想過,但也許Excel不是最合適的。 – bmende

+1

偉大的問題和方法! –

回答

1

(我想使這個註釋,但它變得太長)

的答案將取決於您希望如何訪問和處理的話,一旦存儲。

有3名候選人顯著優點和明顯的優勢:

  1. 陣列是非常有效的填充,並在一次(Ex範圍到陣列和陣列回範圍)檢索的所有項目,但在重新調整大小並在中間插入物品時速度要慢得多。每個Redim都將整個內存塊複製到一個更大的位置,如果使用了Preserve,則所有的值都將被複制。這可能轉化爲感知遲鈍每個操作(在一個潛在的應用程序)

    • 更多詳細資料(陣列VS集合)here(VB具體的,但它適用於VBA和)
  2. 集合與散列表鏈接的列表 - 填充相當緩慢,但在此之後,您可以即時訪問集合中的任何元素,並且在重新排序(排序)和重新調整大小時也同樣快速。這可以轉化爲緩慢的打開文件,但所有其他操作都是即時的。其它方面:

    • 檢索鍵以及與這些鍵關聯
    • 處理區分大小寫鍵
    • 項目可以是其他的集合,數組中的項目,對象
    • 雖然鍵必須是唯一的,他們也可選
    • 一個項目可以在參照其鍵被返回,或者在參照其索引值
    • 密鑰總是字符串,並始終不區分大小寫
    • 項目都可以訪問和檢索,但是它的鍵不
    • 不能一次性刪除所有項目(一個接一支,或破壞然後重新創建集合
    • 與枚舉對於每個... ...接下來,列出所有項目

    • 更多信息herehere

  3. 字典:一樣的收藏品,但與.Exist的額外收益s()方法,在某些情況下,它使得它們比集合更快。其它方面:

    • 鍵是強制性的,總是獨有的字典
    • 的項目只能在參考返回其關鍵
    • 鍵可以採用任何數據類型;爲字符串鍵,默認字典是大小寫敏感的
    • 是否存在()方法來測試特定鍵的存在(和項目)

      • 類別沒有類似的測試;相反,你必須嘗試檢索從收集的值,並處理所產生的誤差,如果關鍵是沒有找到
    • 項目和按鍵始終可以訪問和檢索到開發商
    • 項目屬性爲讀/寫,因此它允許改變與特定的鍵
    • 您可以刪除在一個單一的步驟中的所有項目,而不破壞字典本身
    • 使用For ...每個...下一頁詞典將枚舉密鑰相關聯的項目
    • A Dictionary支持隱式addi ng使用Item屬性的項目。

      • 於類別,項目必須明確添加
    • 更多細節here


其他鏈接:optimizing loopsoptimizing strings(同一網站)

+1

謝謝你的迴應! 那麼,我實際上只在一開始就只重複一次這個數組(爲了設置UBound)。除此之外,我只用它來創建其他列表,並將這些列表與其內容進行比較。我可能會更改arr中的實際字符串(以更改我的祕密bool val),但我不需要刪除str或插入任何新的字符串。我想說哪一個更好是有點投機的? – bmende

+1

我知道我會爲整個arr檢查這些bool vals多次。所以,不知道這種情況是否會讓我放慢腳步。 – bmende

+0

InStr相當快。有一個優化的版本甚至更快的InStrB;更多細節[here](http://www.aivosto.com/vbtips/stringopt.html#instrb)。但是你打算如何處理大名單呢? –

相關問題