2016-04-14 12 views
0

私は、これを行うより速い方法があるかどうか疑問に思っていました:フィールドのコレクションを検索する最速の方法

私はオブジェクトの配列を持っています。新しいオブジェクトが提示されると、そのオブジェクトが配列内にすでに存在するかどうかを(オブジェクト内のフィールドを使用して)調べたいと思います。存在する場合は、フィールドの1つを追加するだけです。存在しない場合は追加してください。

If (myCollection.count <= 0) Then 
     'collection must be empty, so just add it 
     Set myObj= New objClass 
     With myObj 
      .OBJ_ID = ID 
      .first_name = first_name 
      .last_name = last_name 
      .page_number = pageCounter 'some global variable 
     End With 
     myCollection.Add myObj, ID 
    Else   
     Dim myObj As objClass 
     'iterate through collection and see if it already exists 
     For Each myObj In myCollection 
      'if it does exists, just append one of the fields 
      If myObj.OBJ_ID = ID Then 
       myObj.page_number = myObj.page_number & "," & pageCounter 
       isFound= True 
      End If 
     Next 
     'if it doesn't exists, add it 
     If (isFound = False) Then 
      Set myObj= New objClass 
      With myObj 
       .OBJ_ID = ID 
       .first_name = first_name 
       .last_name = last_name 
       .page_number = pageCounter 
      End With 
      myCollection.Add myObj 
     End If 
    End If 

だから、私は与えられたフィールド値を持つオブジェクトは、すでに存在しているかどうかを確認するために、コレクション全体を反復処理されて最適化する必要がある部分を推測:

は、ここに私のコードです。

On Error Resume Next 
Set myObj = myCollection(ID) 
On Error GoTo 0 
If Not myObj Is Nothing Then 
    myObj.page_number = myObj.page_number & "," & pageCounter 
    isFound = True 
End If 

おかげ

+0

配列を反復可能なコレクションアイテムを試してみて、設定する高速です'Object'の' Collection'か? – Comintern

+0

オブジェクトの集合です。私の悪い、私はタイトルを編集します – jason

答えて

1

代替

For Each myObj In myCollection 
    'if it does exists, just append one of the fields 
    If myObj.OBJ_ID = ID Then 
     myObj.page_number = myObj.page_number & "," & pageCounter 
     isFound = True 
    End If 
Next 

それは、 `Object`のそれらのすべて

+0

はい、C&Pのタイプミス。気づいてくれてありがとう – user3598756

+0

ありがとう、これは物事をスピードアップするのに役立ちました。 – jason

関連する問題