Announcement

Collapse
No announcement yet.

In ListView nach doppelten Einträgen suchen und löschen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • In ListView nach doppelten Einträgen suchen und löschen

    Kennt jemand eine schnelle Methode um in einer Listview doppelte Einträge zu finden und zu löschen ?

    Gruss
    Stefan

  • #2
    Ich denke, dass du hiermit was anfangen kannst.

    <span style="font-family: Courier New, Times New Roman, Arial; font-size: 8pt;">&nbsp;<span style="font-weight: bold;">function</span>&nbsp;RemoveDuplicatesFromStringList(List:&nb sp;TStrings):&nbsp;TStringList;&nbsp;
    &nbsp;<span style="font-weight: bold;">var</span>&nbsp;i,&nbsp;j,&nbsp;Counter:&nbsp;Integer;& nbsp;
    &nbsp;<span style="font-weight: bold;">begin</span>&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:= &nbsp;TStringList.Create;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight: bold;">for</span>&nbsp;i&nbsp;:=&nbsp;0&nbsp;<span style="font-weight: bold;">to</span>&nbsp;List.Count-1&nbsp;<span style="font-weight: bold;">do</span>&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;<span style="font-weight: bold;">begin</span>&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Counter&nb sp;:=&nbsp;0;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight: bold;">for</span>&nbsp;j&nbsp;:=&nbsp;0&nbsp;<span style="font-weight: bold;">to</span>&nbsp;Result.Count-1&nbsp;<span style="font-weight: bold;">do</span>&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;<span style="font-weight: bold;">begin</span>&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight: bold;">if</span>&nbsp;Result[j]&nbsp;=&nbsp;List[i]&nbsp;<span style="font-weight: bold;">then</span>&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Counter&nbsp;:=&nbsp;Counter&nbsp;+&nb sp;1;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;<span style="font-weight: bold;">end</span>;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight: bold;">if</span>&nbsp;Counter&nbsp;=&nbsp;0&nbsp;<span style="font-weight: bold;">then</span>&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;Result.Add(List[i]);&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;<span style="font-weight: bold;">end</span>;&nbsp;
    &nbsp;<span style="font-weight: bold;">end</span>;&nbsp;</Span>

    Gruß, Christian
    If it's there and you can see it – it's REAL
    If it's there and you can't see it – it's TRANSPARENT
    If it's not there and you can see it – it's VIRTUAL
    If it's not there and you can't see it – it's GONE!

    Comment


    • #3
      Hallo christian,
      das ist nicht ganz das was ich suche.
      Doppelte einträge in einer StringList ist ja nicht allzu schwer.
      Mir gehts aber um eine ListView in der entsprechende SubItems nach Doppelten Vorkommen geprüft und demensprechend auch gelöscht werden müssen.

      Gruss
      Stefa

      Comment


      • #4
        Ich würde wahrscheinlich eine Stringliste erzeugen, und Duplicates auf false setzen. Dann kannst Du die neue Liste mit den Strings füllen, die ggf. doppelte enthalten. z.B. mit der Einstellung dupIgnore und Count der Stringliste kannst Du prüfen, ob der eintrag hinzugefügt werden konnte, wenn nicht, kannst Du gleich die Quelle aus den der String kam löschen

        Comment


        • #5
          Hallo Stefan,
          wir haben in unserer Anwendung ständig mit baumartigen Strukturen zu tun die wir durchsuchen oder manipulieren müssen.

          Erst einmal etwas grundsätzliches:
          Das Durchsuchen einer grafischen Komonente sollte immer vermieden werden. Der Vorgang dauert deutlich länger als die Suche in einer Speicherstruktur.

          D.h. trenne die dargestellten Informationen von der Darstellung im ListView (MVC -> Modell / View / Controller).

          So jetzt zu Deiner Frage:
          Wir verwenden hierfür eine StringListe, in der wir alle Einträge mit einem eindeutigen Schlüssel flach (ohne Hierarchie) ablegen. Will ich jetzt wissen, ob ein Element bereits vorhanden ist, schaue ich in der StringListe nach und kann dann weiterentscheiden.

          In Deinem Fall, bevor Du ein Element in den ListView einhängst, schaust Du in der StringList nach, ob das Element bereits vorhanden ist. Wenn nicht, hängst Du es ein, ergänzt den Eintrag in der StringListe und bist fertig.

          Gruss
          Fran

          Comment

          Working...
          X