[VBS] Hoe twéé arrays samen voegen

Pagina: 1
Acties:

  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Ik ben VBS leerende. Ik heb twéé arrays met Active Directory users erin. Voorbeeld vulling:

code:
1
2
3
4
5
6
Set objGroup = GetObject _
("LDAP://cn=testusers,dc=infotheekgroep,dc=local")
objGroup.GetInfo

' Array met alle gebruikers van de AD
arrAllUserMember = objGroup.GetEx("member")


Nu wil ik dit array met zo'n zelfde samenvoegen. Hoeft niet op volgorde, duplicaten mag. Ik kom er simpelweg niet achter hoe ik arrays kan samenvoegen. Kan iemand me opweg helpen.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Er zullen wel meerdere wegen zijn die naar Rome leiden. Een eenvoudige oplossing is:
- join beide arrays met een delimiter tot een string
- concatenate beide strings met daar tussen dezelfde delimiter
- split de string

VBScript:
1
2
3
4
5
Function ArrayMerge(A1, A2)
    Dim Result, Delimiter
    Delimiter = "|"
    ArrayMerge = Split(Join(A1, Delimiter) & Delimiter & Join(A2, Delimiter), Delimiter)
End Function


Andere optie (maar waarschijnlijk trager)
VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function ArrayMerge(A1, A2)
    Dim Result(), Item, i
    i = 0
    
    For Each Item In A1
        ReDim Preserve Result(i)
        Result(i) = Item
        i = i + 1
    Next
    
    For Each Item In A2
        ReDim Preserve Result(i)
        Result(i) = Item
        i = i + 1
    Next
    
    ArrayMerge = Result
End Function

[ Voor 29% gewijzigd door Annie op 10-08-2006 19:19 ]

Today's subliminal thought is:


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Een derde optie, die waarschijnlijk het snelst is:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Function ArrayMerge(A1, A2)
   Dim Result, I1, I2
   ReDim Result(UBound(A1) + UBound(A2))

   For I1 = 0 To UBound(A1)
      Result(I1) = A1(I1)
   Next
   I1 = UBound(A1)  'weet niet zeker of dit nodig is

   For I2 = 0 To UBound(A2)
      Result(I1 + I2) = A2(I2)
   Next

   ArrayMerge = Result
End Function

Misschien moet je bij die UBounds ergens nog wat +1 of -1 toevoegen. Ik heb zelf nooit gesnopen wat die dingen nou teruggeven en wat je nou precies in ReDim moet stoppen. Maar dit is sneller dan er strings van maken en weet terugomzetten naar arrays, en ook sneller dan de result-array elke keer met 1 element laten groeien.

日本!🎌


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Met alle respect, maar je hebt volgens mij geen Arrays maar Collections. En da's toch net iets anders... (then again, misschien zoiets ranzigs als een Variant Array zou ook kunnen... :X )

[ Voor 28% gewijzigd door RobIII op 10-08-2006 23:38 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

_Thanatos_, volgens mij moet je in beide for-loops 'UBound(...)' vervangen door 'UBound(...) - 1'.
Je begint nl. netjes bij 0 te tellen, maar dan val je bij '... to UBound(...)' uit de array. ;)

Je ReDim klopt wel trouwens, en die "weet niet zeker" toevoeging is ook wel handig, omdat wanneer je 't goed had gedaan I1 nooit over de rand gekieperd was en altijd 1 lager dan UBound(A1) was gebleven. :)

/me heeft ook niks met VBS...

  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Thansk voor jullie input, ik ga ermee aan de slag.

  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 27-12-2025
Wat misschien beter is om niet bij 0 te beginnen maar bij LBound(array) en te eindigen bij UBound(array) zo weet je zeker dat je goede begin en eind punten hebt.
FYI: De U en de L staan voor Upper en Lower ;) .
Pagina: 1