Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Hevelmann am 06.08.03 - 16:55:16
-
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
-
;) 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
-
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
-
;)
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
-
Danke für die schnelle Hilfe, Ihr habt mir sehr geholfen.
Gruss Hevelmann