2015-05-12 43 views
0

我有這樣的數據結構的最佳結構:什麼是數據分組的行存儲在VB

Category Product Group RequiredAmount StockAmount 

樣本數據

A A 1 10 5 
A B 1 10 10 
A C 2 20 10 
A D 3 30 40 
B E 1 10 15 
B F 2 20 20 

我想將其存儲在排序的集合中,同時能夠:

  • 訪問它通過類別然後臨風管
  • 保持項目訂單爲輸入,不按字母順序排序。
  • 更改金額

它將處理大約100個項目。

我最初使用一個字典的類別,拿着一維數組的集合,產品作爲關鍵。

主要問題是更改金額,因爲更改集合中的項目需要添加和刪除它們,這會更改項目順序。

有什麼想法?

+3

我會建議使用自定義類的數據結構另請參見[這裏](http://codereview.stackexchange.com/questions/60504/building-a-better-collection-enumerable -in-vba)... –

+1

對於一個小列表來說,一個結構數組似乎足夠好。 – Tim3880

+0

@PeterSchneider這是一個很好的實現,但它使用了一個集合,它使我回到了改變值而不改變集合的問題。據我所知,如果它是存儲在集合中的對象,則這些項目將作爲副本而不是通過引用返回。 – dePatinkin

回答

1

這會創建一個2字段記錄集(可以將其保存到磁盤)。使你的6個字段,幷包括一個行號字段,你可以用它來排序回原來的順序。然後,您可以對其進行排序並過濾它。

Set rs = CreateObject("ADODB.Recordset") 
With rs 
    .Fields.Append "SortKey", 4 
    .Fields.Append "Txt", 201, 5000 
    .Open 
    Do Until Inp.AtEndOfStream 
     Lne = Inp.readline 
     .AddNew 
     .Fields("SortKey").value = CSng(SortKey) 
     .Fields("Txt").value = Lne 
     .UpDate 
    Loop 
       .Sort = "SortKey ASC" 
       .Filter = "SortKey > 5" 
    Do While not .EOF 
     Outp.writeline .Fields("Txt").Value 
     .MoveNext 
    Loop 
End With