Feststellen ob die Liste aufsteigend sortiert ist

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Feststellen ob die Liste aufsteigend sortiert ist

Re: Feststellen ob die Liste aufsteigend sortiert ist

Post by just me » 17 Oct 2019, 05:20

Bitte sehr! ;)

Re: Feststellen ob die Liste aufsteigend sortiert ist

Post by KHA » 16 Oct 2019, 11:10

Dankeschön!.

Re: Feststellen ob die Liste aufsteigend sortiert ist

Post by just me » 16 Oct 2019, 02:36

Die Variable VorZeile ist nicht 0 sondern leer. Weil es keine Zeichenkette geben kann, die kleiner als die leere Zeichenkette ist, ergibt der erste Vergleich If (A_LoopField < VorZeile) immer falsch. Meine Funktion macht dann einfach weiter und aktualisiert den Inhalt von VorZeile. Nur wenn tatsächlich eine Zeile gefunden wird, die kleiner ist als die Vorzeile, wird sofort False zurückgegeben.

In Deinem Beispiel wird der Inhalt der Variablen VorZeile nur dann aktualisiert, wenn tatsächlich eine kleinere Zeile gefunden wird. Weil das nicht möglich ist, bleibt sie leer, d.h. das Ergebnis ist immer "Ja ist sortiert".

Eine mögliche Alternative für Deinen Code wäre

Code: Select all

#NoEnv
Liste1 =
(Join`r`n
A1001	Auto	Schwarz
A1002	Fahrrad Grün
A1003	LKW	Weiss
)
;
Liste2 =
(Join`r`n
A1003	LKW	Weiss
A1001	Auto	Schwarz
A1002	Fahrrad Grün
)
;
VorZeile := ""
Sortiert := True
Loop, Parse, Liste1, `n, `r
{
   If (A_LoopField < VorZeile) {
      Sortiert := False
      Break
   }
   VorZeile := A_LoopField
}
MsgBox, 0, Liste1, Ist sortiert = %Sortiert%
;
VorZeile := ""
Sortiert := True
Loop, Parse, Liste2, `n, `r
{
   If (A_LoopField < VorZeile) {
      Sortiert := False
      Break
   }
   VorZeile := A_LoopField
}
MsgBox, 0, Liste1, Ist sortiert = %Sortiert%
;
ExitApp

Re: Feststellen ob die Liste aufsteigend sortiert ist

Post by KHA » 14 Oct 2019, 11:53

Vielen Dank @just me es funktioniert super.
Was ich nicht verstehe, warum es funktioniert.
Meine ursprüngliche Idee war, so etwas ähnliches. Es hat aber nicht funktioniert weil, Vorzeile ist am Anfang immer 0, wenn die Schleife zum ersten mal läuft, gibt es einen Vergleich I If (A_LoopField < VorZeile) das Ergebnis der IF-Anfrage ist immer False.
Wieso funktioniert es bei dir? Hat es etwas mit ByRef zu tuen?

Code: Select all

#NoEnv
Liste1 =
(Join`r`n
A1001	Auto	Schwarz
A1002	Fahrrad Grün
A1003	LKW	Weiss
)

Liste2 =
(Join`r`n
A1003	LKW	Weiss
A1001	Auto	Schwarz
A1002	Fahrrad Grün
)




VorZeile =

   Loop, Parse, Liste1, `n, `r
   {
      If (A_LoopField < VorZeile)
      VorZeile := A_LoopField
   }

if VorZeile =
msgbox, Ja ist sortfiert

Re: Feststellen ob die Liste aufsteigend sortiert ist

Post by just me » 14 Oct 2019, 08:28

Für das konkrete Beispiel z.B.:

Code: Select all

#NoEnv
Liste1 =
(Join`r`n
A1001	Auto	Schwarz
A1002	Fahrrad Grün
A1003	LKW	Weiss
)

Liste2 =
(Join`r`n
A1003	LKW	Weiss
A1001	Auto	Schwarz
A1002	Fahrrad Grün
)

MsgBox, 0, Liste1, % "IsSorted = " . IsSorted(Liste1)
MsgBox, 0, Liste2, % "IsSorted = " . IsSorted(Liste2)

ExitApp

IsSorted(ByRef Data) {
   VorZeile := ""
   Loop, Parse, Data, `n, `r
   {
      If (A_LoopField < VorZeile)
         Return False
      VorZeile := A_LoopField
   }
   Return True
}

Feststellen ob die Liste aufsteigend sortiert ist

Post by KHA » 14 Oct 2019, 08:06

Hallo,
wie kann ich überprüfen, ob eine Liste aufsteigend sortiert ist, die liste soll nicht sortiert werden

z.B

Code: Select all

A1001	Auto	Schwarz
A1002	Fahrrad Grün
A1003	LKW	Weiss
=> True

Code: Select all

A1003	LKW	Weiss
A1001	Auto	Schwarz
A1002	Fahrrad Grün
=> False

LG

Top