Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: CLI_Andreas_Schmidt am 19.07.06 - 10:57:06

Titel: @ismember ???
Beitrag von: CLI_Andreas_Schmidt am 19.07.06 - 10:57:06
Hi @all Devs,

gibt es eigentlich einen einfachen und unkomplizierten Weg um zwei Listenfelder (Arrays) zu vergleichen ? ---> also

In Feld 1 gibt es z.B. 4 Listeneinträge und es soll jetzt geprüft werden ob welcher in Feld 2 fehlt.

Mein Ansatz wäre jetzt eine forall-Schleife auf Feld 1   und dann @ismember in Feld 2 ausführen. Wobei ich noch kein LS-Code für @ismember gefunden habe.


Titel: Re: @ismember ???
Beitrag von: ZaLudtske am 19.07.06 - 11:00:09
Hallo,

rein in LS gehen nur verschachtelte Schleifen. Aber du kannst mit evaluate Formel in LS ausführen.

Rainer
Titel: Re: @ismember ???
Beitrag von: eknori am 19.07.06 - 11:02:57
in LS ArrayGetIndex
Titel: Re: @ismember ???
Beitrag von: eknori am 19.07.06 - 11:05:37
und mit der ArrayReplace function  könntest du in einem Rutsch alle Vorkommen von Array A in ( einer Kopie von ) Array B durch "" ersetzen. Die resultierenden Einträge sind dann die, die in A fehlen.
Titel: Re: @ismember ???
Beitrag von: 0xse am 19.07.06 - 11:13:05
Für LS: Pack dein zweites Array in eine Liste (den Arraywert als Listenindex), dann kannste mit IsElement danach suchen lasssen. Binäre Bäume sind da sehr flott :)
Titel: Re: @ismember ???
Beitrag von: CLI_Andreas_Schmidt am 19.07.06 - 11:18:35
Danke : )

Ich werde mal die Ansätze durchgehen und dann die Lösung Posten.

Titel: Re: @ismember ???
Beitrag von: DerAndre am 19.07.06 - 11:18:54
Eine Liste ist ein binärer Baum?
Ich würde sagen, das ist eher eine einfach verkettete Liste, aber kein binärer Baum.

André
Titel: Re: @ismember ???
Beitrag von: CLI_Andreas_Schmidt am 19.07.06 - 11:44:42
Hier die Lösung : )

For l = 1 To pruefdoccol.Count
Redim Preserve liste(j)
' In der Variable Liste sind jetzt alle Feldwerte aus den Dokumenten gespeichert
liste(j) = pruefdoc.final_mo(0)
j = j + 1
Set pruefdoc  = pruefdoccol.GetNextDocument(pruefdoc)
Next

Dann.....

Forall m In Liste 2
indexresult = Arraygetindex( liste , m)
If Isnull(indexresult) Then
....

end if

Jupp..
Titel: Re: @ismember ???
Beitrag von: LN4ever am 19.07.06 - 11:48:40
Wenn man in einem Dokument ein item mit einer Liste füllt, kann man sehr schön mit item.Contains als Äquivalent zum @Ismember darauf zugreifen.

Ich weiß, daß wir hier in einem 6er-Forum sind: aber die Methode funktioniert ab Version 4 - und mit 5er Clients habe ich noch lange zu tun, kann also high sophisticated Funktionen für Client-Operationen nicht einsetzen.
Titel: Re: @ismember ???
Beitrag von: 0xse am 19.07.06 - 11:52:07
Eine Liste ist ein binärer Baum?
Ich würde sagen, das ist eher eine einfach verkettete Liste, aber kein binärer Baum.

André

Das ist ja eigentlich nicht mal eine Liste sondern ein assoziatives Array. Allerdings ist die Abfrage eines Elementes über den Index sehr schnell. Dauert bei 300.000 Elementen nur minimal länger als bei 100 Elementen. Und dieser Effekt läßt mich auf einen binären Baum schließen. Alles andere wäre langsamer.
Titel: Re: @ismember ???
Beitrag von: CLI_Andreas_Schmidt am 19.07.06 - 12:55:36
item.contains ist keine schlechte Möglichkeit. Funktioniert leider nur dann, wenn sich das Listefeld in EINEM Dokument befindet. Wird jedoch die Liste aus vielen Dokumenten zusammengesammelt, dann klappt das so schon nicht mehr. Die Index-Lösung ist wirklich sehr schön. : )