2017-12-11 1 views
2

VBA에서 두 개의 컬렉션을 병합하는 가장 효율적인 방법은 무엇입니까? 그래서 처음 두 컬렉션의 모든 항목을 포함하는 세 번째 컬렉션이 있습니까?VBA에서 두 개의 컬렉션을 병합하는 방법은 무엇입니까?

+0

배열이 더 효율적일 때 컬렉션을 병합하는 가장 효율적인 방법을 찾고있는 이유는 무엇입니까? –

+0

@FlorentB. 그게 내 데이터가 저장되는 방법이고, 내가 가지고있는 것과 함께해야만합니다! 그러나 내가 이것을 묻는 메시지를 표시하는 응용 프로그램에서 컬렉션을 사용하고 있습니다. 컬렉션에서 * 더 효율적이라고 생각하는 배열을 지속적으로 추가/제거하고 있기 때문입니다. 또는 당신이 말한 것은 변형을 배열에 쓰는 것이 콜렉션에 다시 쓰는 것이 합병의 효율적인 방법이된다면, 꼭 모든 것을 게시하고 벤치 마크 할 수 있습니다! – Greedo

+0

어레이는 추가/제거시에도 수집보다 효율적입니다. –

답변

2

읽기 this article, 좋아.

결론 : 배열을 반복하는 루프 For

  • 사용.
  • 컬렉션을 반복하려면 For Each 루프를 사용하십시오.

그래서, For Each 루프를 사용하여 컬렉션을 반복하고 3 번째 컬렉션이 루프 Add 항목이다.

+0

환상적인, 그래서 당신이 대답을 알고 있다고 생각하더라도 게시해야합니다! 나는 For ... Each는 컬렉션의 순서가없는 특성을 이용하고, For i = 1 to Count는 맵을 여러 번 조회해야하기 때문에 이것이라고 생각합니다. – Greedo

0

컬렉션을 병합하여 항목을 반복하고 새 컬렉션 또는 원본 컬렉션 중 하나에 컬렉션을 추가 할 수 있습니다. 이 비록 2 컬렉션의 키를 보존하지 않습니다 - 당신이 원하는 경우에 당신이 컬렉션을 사용할 수

다른 Collectioncol1Collectioncol2의 항목을 추가하고 새로운 병합 Collection을 반환하려면 :

Function mergedCollection(ByVal col1 As Collection, ByVal col2 As Collection) As Collection 
    'Add items from col2 to col1 and return the result 
    'ByVal means we are only looking at copies of the collections (the values within them) 
    'The function returns a NEW merged collection 
    Dim i As Long 
    For i = 1 To col2.Count 
     col1.Add col2.item(i) 
    Next i 
    Set mergedCollection = col1 'set return value 
End Function 

직접 col1col2을 추가 할 수

Sub mergeCollectionsInPlace(ByRef col1 As Collection, ByVal col2 As Collection) 
    'Routine to add items from col 2 directly to col1 
    'ByRef col1 means we are adding directly to the original col1 
    'Routine doesn't return a new collection, it just appends col2 to col1 
    Dim i As Long 
    For i = 1 To col2.Count 'loop through each item in collection 2 
     col1.Add col2.item(i) 'add the item at index i to collection 1 
    Next i 
End Sub 
( col1이 변경됩니다)

를 사용하여 각 오브젝트 컬렉션을 반복 할 때, 대를 배열이 반복되는 경우 ForFor Each 대 루프를 비교

Dim col3 As Collection 
Set col3 = mergedCollection(col1, col2) 'sets col3 to be the merge of the two collections 
mergeCollectionsInPlace(col1, col2)  'sets col1 to be the merge of the two collections 
+1

'For' 루프를 사용하여 콜렉션을 반복하는 것이 * 가장 효율적인 방법이 될 수 없습니다 *. –

관련 문제