vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Alte Einträge aus Liste löschen 
Autor: papa99
Datum: 19.06.19 10:09

Hallo zusammen,

ich habe eine Liste (ID, Name, Klasse, Alter, Brille) in die laufend geschrieben wird:

1, Fritz, 3a, 10, ja
2, Hugo, 3b, 11, nein
3, Karl, 3a, 10, nein
4, Hugo, 3b, 12, nein
5, Fritz, 3a, 10, ja

Mich interessieren die aktuellen Namen mit Klasse, alle anderen Einträge möchte ich löschen. Das hab ich mit zwei Schleifen versucht...

            For Each mySchueler As Schueler In mySchuelerList
                For Each delSchueler As Schueler In mySchuelerList
                    If delSchueler.Name = mySchueler.Name AndAlso
                            delSchueler.Klasse = mySchueler.Klasse AndAlso
                            delSchueler.id < mySchueler.id Then
                        delSchuelerList.Add(delSchueler)
                    End If
                Next
            Next
 
            For Each delMat As Schueler In delSchuelerList
                mySchuelerList.Remove(delMat)
            Next
...bringt aber nicht den gewünschten Erfolg und dauert ziemlich lange (10.000 Zeilen)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Alte Einträge aus Liste löschen 
Autor: Manfred X
Datum: 19.06.19 13:38

Hallo!

Bitte beim Posten von Code immer angeben, wie die verwendeten Variablen deklariert sind.

    Private Class Schueler
        Public Property Klasse As String
        Public Property ID As Integer
        Public Property Name As String
    End Class
 
'.................................
'.................................
 
    Dim myschuelerlist As New List(Of Schueler)
 
    Dim name As String = "", klasse As String = ""
 
'....................................
 
   With myschuelerlist
      For i As Integer = .Count - 1 To 0 Step -1
         If .Item(i).Name = name AndAlso .Item(i).Klasse = klasse Then
            .RemoveAt(i)
         End If
      Next i
   End With
Ich empfehle, in die Klasse Schüler eine passende Sortier-Schnittstelle zu implementieren.
Geeignet sortierte lange Listen können sehr effizient durchsucht werden.

Beitrag wurde zuletzt am 19.06.19 um 13:42:15 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Alte Einträge aus Liste löschen 
Autor: papa99
Datum: 19.06.19 14:56

Hallo Manfred!

Danke für die Tipps!

Aber bei deinem Beispiel ist nicht sicher, dass ich den aktuellsten Eintrag bekomme (höchste ID). Da müsste ich doch erst die ganze Liste sortieren...Eigentlich kann ich damit nur leere Einträge löschen, oder?

Und wie würde so eine Sortier-Schnittstelle aussehen?

Beitrag wurde zuletzt am 19.06.19 um 15:07:04 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Alte Einträge aus Liste löschen 
Autor: Manfred X
Datum: 19.06.19 15:22

Ich weiß nicht, wie Deine gelistete Variable "Schüler" deklariert ist.

Wenn Du nur den Eintrag mit der höchsten ID (bezogen auf Name, Klasse) löschen willst ...

Dim name As String, klasse As String
Dim maxid, index As Integer
 
'....................................
'....................................
With myschuelerlist
    maxid = -1 : Index = -1
    For i As Integer = 0 To .Count - 1
       With .Item(i)
          If .Name = name AndAlso .Klasse = klasse Then
             If maxid < .ID Then
                maxid = .ID : Index = i
             End If
          End If
       End With
    Next i
    If Index >= 0 then .RemoveAt(Index) 'Letzen Eintrag löschen
End With
Um nur den letzten zu behalten, mußt Du die Liste noch einmal rückwärts durchlaufen
und alle Einträge zu dem Namen/Klasse löschen, bis auf den oben gefundenen Index.


Suchst Du so etwas? Nur den höchsten Index aller Einträge behalten bei einer ansteigend
sortierten Liste nach ID.
For i As Integer = .Count - 1 To 0 Step -1
   For k As Integer = .Count - 1 To i + 1 Step -1
      If .Item(i).Name = .Item(k).Name AndAlso .Item(i).Klasse = .Item( _
        k).Klasse Then
         .RemoveAt(i)
      End If
   Next k
Next i
Für spezielle Sortierfunktionen mußt Du die IComparable-Schnittstelle
in der Klasse "Schueler" implementieren.

Beitrag wurde zuletzt am 19.06.19 um 15:47:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Alte Einträge aus Liste löschen 
Autor: Manfred X
Datum: 19.06.19 15:54

Schnittstelle für das Kopieren der Schüler-Liste nach der ID
 
Private Class Schueler
        Implements IComparable(Of Schueler)
 
        Public Property Klasse As String
        Public Property ID As Integer
        Public Property Name As String
 
        Public Function CompareTo(other As Schueler) As Integer 
            Implements IComparable(Of Schueler).CompareTo
            Return Me.ID.CompareTo(other.ID)
        End Function
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel