[gelöst] StringList: Duplikate entfernen

Antworten
holgerv
Beiträge: 288
Registriert: 20 Aug 2012, 09:35

[gelöst] StringList: Duplikate entfernen

Beitrag von holgerv »

Hallo,

ich möchte eine StringList erzeugen, die alle Strings einer anderen StringList enthält, aber jeden String nur ein einziges Mal. Anders formuliert: Ich will Duplikate aus einer StringList entfernen.

Mein erster Ansatz sah so aus:

Code: Alles auswählen

[Actions]
defstringlist $list1$
defstringlist $list2$
set $list1$ = createStringList("bettina", "ina", "peter", "ina")

for %prename% in $list1$ do sub_addToListIfNameIsNew
message "All prenames: " + composeString($list1$, ", ")
message "All prenames without duplicates: " + composeString($list2$, ", ")

[sub_addToListIfNameIsNew]
if count(getListContaining($list2$, "%prename%")) = "0"
   set $list2$ = addToList($list2$, "%prename%")
endif
Das Ergebnis soll sein: "bettina, ina, peter". Das funktioniert aber leider nicht. Im Ergebnis ($list2$) fehlt der String "ina", weil "ina" auch im String "bettina" vorkommt.
Jetzt kann ich natürlich bei jedem Durchlauf von "sub_addToListIfNameIsNew" eine Schleife über alle Strings in $list2$ machen und sie mit %prename% vergleichen. Aber das muss doch einfacher gehen, oder?

Danke für eure Hilfe


Holger
Zuletzt geändert von holgerv am 08 Mai 2015, 15:25, insgesamt 1-mal geändert.
holgerv
Beiträge: 288
Registriert: 20 Aug 2012, 09:35

Re: StringList: Duplikate entfernen

Beitrag von holgerv »

Falls es jemanden interessiert: Ich habe das Problem jetzt mit einer verschachtelten Schleife gelöst. Ein eleganterer Weg ist mir leider nicht eingefallen:

Code: Alles auswählen

[Actions]
defVar $neu_jaNein$
defVar $string1$
defStringList $listeMitAllenStrings$
defStringList $listeOhneDuplikate$

set $listeMitAllenStrings$ = createStringList('anna','bettina', 'carla', 'anna', 'ina', 'bettina')

if count($listeMitAllenStrings$) > "0"
	comment 'Liste mit allen Strings: ' + composeString($listeMitAllenStrings$, ", ")
else
	comment 'Liste mit allen Strings: /'
endif

for %string1% in $listeMitAllenStrings$ do sub_hinzufuegenWennNeu

if count($listeOhneDuplikate$) > "0"
	comment 'Liste ohne Duplikate: ' + composeString($listeOhneDuplikate$, "|")
else
	comment 'Liste ohne Duplikate: /'
endif


[sub_hinzufuegenWennNeu]
message "Untersuche: %string1%"
set $string1$ = "%string1%"
if count($listeOhneDuplikate$) > "0"
	set $neu_jaNein$ = "ja"
	for %string2% in $listeOhneDuplikate$ do sub_setzeNeuGgfAufNein
	if $neu_jaNein$ = "ja"
		set $listeOhneDuplikate$ = addToList($listeOhneDuplikate$, $string1$)
	endif
else
	set $listeOhneDuplikate$ = addToList($listeOhneDuplikate$, $string1$)
endif

[sub_setzeNeuGgfAufNein]
comment "Vergleiche " + $string1$ + " mit %string2%"
if "%string2%" = $string1$
	set $neu_jaNein$ = "nein"
endif
Schönen Gruß


Holger
Antworten