Domino 9 und frühere Versionen > Entwicklung
Vergleich von zwei Variants
(1/1)
Hevelmann:
Hallo Notesgemeinde,
ich zwei Variablen vom Typ Variant und übergebe mehrere Werte mittels:
Sub Initialize
Dim vA as Varinat
Dim vB as Varinat
Dim vC as Variant
...
vA = Evaluate ( {@DbColumn( "" ; "" ; "folder1" ; 1 )} )
vB = Evaluate ( {@DbColumn( "" ; "" ; "folder2" ; 1 )} )
...
End Sub
ich möchte jetzt diese zwei Variablen miteinander vergleichen und eine dritte Variable vC erstellen, die alle Werte enthält, die sowohl in vA als auch in vB vorkommen. Also ähnlich der Funktion @Keywords.
Kann mir jemand weiterhelfen. Ich bin für jede Antwort dankbar.
Gruss Hevelmann
Thomas Schulte:
;) Aus "Programmieren für Anfänger". ;)
Vergleich von zwei Variants mit der Ausgabe der gleichen Treffer in eine dritte Variant
for i = 0 to ubound(VarA)
for j =0 to ubound(VarB)
if VarA(i) =VarB(j) then
if Ubound(VarC) > 0 then
Redim Preserve VarC(Ubound(VarC)+1)
end if
VarC(Ubound(VarC)) = VarA(i)
Exit For
end if
next
next
Ohne Gewähr für Syntax Richtigkeit
Thomas
Glombi:
Hi,
ich denke die Schulbuchlösung ist der reinste Performancekiller, wegen der 2 Schleifen und dem Redim Preserve.
Falls das ganze in einem Dokument gemacht wird (sonst erstellt man eben schnell eines), ginge auch das:
vA = Evaluate ( {@DbColumn( "" ; "" ; "folder1" ; 1 )} )
vB = Evaluate ( {@DbColumn( "" ; "" ; "folder2" ; 1 )} )
if isArray(vA) and IsArray(vB) then
doc.vA = vA
doc.vB = vB
dim ret_eval as Variant
ret_eval = Evaluate( |FIELD vC := @Keyword(vA;vB);@True|, doc)
end if
Dann steht in vC das gesuchte.
Andreas
Thomas Schulte:
;)
Ich geb ja zu das Glombi's Lösung schneller ist. Zumindest bei größeren Arrays
;)
Ich geb auch zu das man diese Lösung noch optimieren kann. Zum Beispiel kann man sich eine Schleife sparen und das Redim Preserve kann man auch in die Tonne klopfen wenn man anstelle des zweiten Arrays einen String nimmt und dann mit dem hier
gesuchterString = strLeft(strRight(deinString,"name= ")," attribut=")
(Stammt übrigen auch von Glombi), vergleicht und in einen zweiten String wegschreibt. Zum Schluß braucht man dann nur noch einen Explode auf den String und man hat wieder ein Array. Ist zwar ein bischen mehr script, dürfte aber die Performance Vorteile bei größeren Arrays egalisieren.
Thomas
Hevelmann:
Danke für die schnelle Hilfe, Ihr habt mir sehr geholfen.
Gruss Hevelmann
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln