Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: botschi am 08.09.08 - 17:23:00
-
Wie kann man prüfen, wie oft ein Element in einem Array steckt?
Muss man das Element beim ersten Treffer durch irgendwas ersetzen und dann in einer Schleife nochmal das Array durchsuchen?
Ich konnte keinen Befehl dafür finden...
Matthias
-
Welche Sprache? Was ist Dir bekannt oder soll das für jede (unbekannte) Element des Arrays vorgenommen werden?
Auf jeden Fall bist Du mit einem Replace und (Full)Trim schon auf der richtigen Spur. Einen expliziten "Befehl" gibt es dafür jedenfalls nicht.
Bernhard
-
Wenn LotusScript möglich, dann würde ich das mit einer Liste erschlagen:
Dim sa_array (0 To 10) As String
Dim i_zaehlListe List As Integer
Forall e In sa_array
If Iselement( i_zaehlListe( e )) Then
i_zaehlListe( e ) = i_zaehlListe( e ) + 1
Else
i_zaehlListe( e ) = 1
End If 'Iselement
End Forall 'e In sa_array
Thomas
-
geht im Script wie mit @Funktionen
- Trim (FullTrim) über das Array (@Trim, Fulltrim)
- Anzahl der Elemente im Array merken (@Elements, Ubound - Lbound)
- die gesuchten Elemente mit einem Leerstring ersetzen (@Replace, ArrayReplace)
- Trim (FullTrim) über das Array (@Trim, Fulltrim)
- Anzahl der Elemente im Array ermitteln (@Elements, Ubound - Lbound)
- Differenz aus den beiden Anzahlwerten ergibt die Anzahl der gesuchten Elemente
-
Das ist ja doof...
Das Array ist ziemlich groß, ca. 20000 Elemente können enthalten sein. Wenn ich das immer in einer Schleife durchgehen muss, scheint mir das nicht sehr performant.
Ich such mir nochmal eine Alternative, vielleicht kann ich es auch anders machen.
Danke für die Antworten!
Matthias
-
mit meiner Variante brauchst Du keine Schleife über das Array.
-
Gut, dass Du das nochmal sasgt ;D
Aber warum Ubound - Lbound? Nur für den Fall, dass mein Array nicht bei 0 anfängt?
Ich bau das mal eben so ein.
Matthias
-
...
Aber warum Ubound - Lbound? Nur für den Fall, dass mein Array nicht bei 0 anfängt?
...
Ja genau. Wiederverwendbarer Code - spart Arbeit und Zeit.
-
was passiert eigentlich wenn mehrerer Elemente in dem Array doppelt/mehrfach vorkommen, bezüglich des Trims und der bound aus dem dann ein Ergebnis errechnet wird?? :oD
MfG KAI
-
ne dies passt schon.
Deshalb werden ja auch zuerst alle leeren Einträge entfernt und dann die Anzahl des Startarrays ermittelt.
-
stimmt .. mir ist kurz @unique ins hirn gefahren ..
-
Wobei: "Leere" Einträge können auch doppelte Einträge sein - kommt auf die jeweilige Anforderung an.
Und das ganze Procedere ohne Schleife setzt voraus, dass man den Inhalt des mehrfach vorkommenden Wertes schon kennt. Diese meine Frage von oben wurde ja bisher nicht beantwortet.
Bernhard
-
Das ist der Ursprung http://atnotes.de/index.php?topic=42354.0 des "Problems".
Ich bekomme eine Liste mit Namen, die ich importieren muss. Wenn es "Hans Dampf" mehrmals in der Liste gibt, muss ich die Adressbucheinträge so anlegen, dass man die verschiedenen "Hans Dampf" unterscheiden kann.
Dafür gibt es viele Wege zum Ziel. Eine Idee war, die "doppelten" zu erkennen und dann (je nachdem, wie oft es den Namen gibt) sie eindeutig zu machen.
Matthias
-
Bei uns gibt's nur Herr Dampfs und Frau Dampfs und die werden denn mit Abteilung und lfd Nr. untersschieden. :oD
Dann ist es aber doch einfacher wenn du die der Reihe nach anlegst und mit einem DBlookup z.b. auf Users$ schaust ob ein Zusatz hinten dran muss oder nicht ..
KAI
-
Für diesen Fall würde ich die List-Variante bevorzugen (siehe #2 hier). Bei 20.000 Namen dürfte Dir ein Array wohl auch um die Ohren fliegen - siehe dessen Grenzen.
Bernhard
-
Ja eben, viele Wege führen zum Ziel.
Mein Gedanke war, ich könnte mit einem einzigen "Befehl" ermitteln, wie oft es Hans Dampf gibt und dann entsprechend handeln.
Ich habe mich auch für einen anderen Weg entschieden.
Danke für die Hilfe!
Matthias