| |
VB.NET - Ein- und UmsteigerAlte 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) | |
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. | |
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. | |
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. | |
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 | |
| 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 |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
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
|
|