![]() |
Kleinsten Wert einer Liste finden
Hallo!
Ich habe folgendes Problem: In einer Liste von Listen sind verschiedene Objekte enthalten. Mit list[a].Count kann ich für "a" jeweils ermitteln, wie viele Objekte in der Liste sind. Nun möchte ich gerne wissen, in welcher Liste am wenigsten Elemente drin sind, und ob in allen Listen gleich viele einheiten drinn sind. Nun müsste ich ja die ganzen Listen durchgehen und die Count-Werte in eine extra-Liste schreiben, diese dann sortieren, den obersten wert ermitteln, die Liste nochmal durchgehen, schauen, welche Liste diesen Count wert hat - fertig. Um herauszufinden, ob alle Listen gleich viele Elemente enthalten, muss ich dann jede Zahl der Ergebnisliste mit dem Vorgänger vergleichen. Keine Unterschiede = alles gleich. So, und jetzt die Frage: Geht das vielleicht einfacher, schneller und effizienter? :mrgreen: EDIT: Titel angepasst. |
Re: Kleinsten Wert einer Liste finden
Ja das geht einfacher:
Pseudo Code:
Code:
Also:
if (listen.count > 0) then
begin kleinser_wert := listen.items[0].count; alle_gleich := True; for i := 1 to listen.count - 1 do begin if (listen.items[i].count < kleinster_wert) then kleinster_wert = listen.items[i].count; alle_gleich := False; end; end; end else Fehler: kein kleinster Wert weil keine liste vorhanden Am Anfang ist der kleinste Wert der wert von der 0ten Liste. Danach geht man alle anderen Listen durch und schaut ob in irgend einer Liste weniger drin ist. Sobald man eine solche Liste gefunden hat sind schonmal nicht alle gleich voll und man merkt sich den Wert der Liste wo weniger drin ist. |
Re: Kleinsten Wert einer Liste finden
So hätte ich das auch gemacht (schneller als O(n) kann es auch nicht werden), nur hast du ein Problem wenn das erste Element das Kleinste ist. In dem Fall kommst du nie ins if und hast alle_gleich = True;
und die Fehlermeldung sollte eher "Liste leer" heissen. |
Re: Kleinsten Wert einer Liste finden
:wall: Ja, genau... Da habe ich wohl nicht lang genug nachgedacht! Vielen Dank!
|
Re: Kleinsten Wert einer Liste finden
Das ist ein Standardcode, den eigentlich jeder mit etwas Erfahrung sofort runterschreibt. So was sieht man ein Mal und vergisst es nicht wieder. Aber die Frage nach "alle gleich" solltest du noch anpassen:
Delphi-Quellcode:
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
if (listen.count > 0) then
begin kleinser_wert := listen.items[0].count; alle_gleich := True; for i := 1 to listen.count - 1 do begin if (listen.items[i].count < kleinster_wert) then kleinster_wert = listen.items[i].count; end; if (listen.items[i].count != kleinster_wert) then alle_gleich := False; end; end; end else Fehler: keine Werte in keine liste vorhanden[/quote] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz