Seite 2 von 2
Re: Map in Structuren werden nicht sortiert
Verfasst: 02.12.2019 03:11
von nicolaus
Also grundsätzlich ist es in einigen Sprachen möglich auch Maps (Hastables) nach Values zu sortieren, eben nur nicht in PB.
Ich verwende sowas z.b. öfter in Powershell / .NET und nein das ist kein Zufall das es dort funktioniert, das ist eine Funktionalität die es dort gibt und in PB nicht.
Was aber PB macht ist etwas verwirrend denn in PB werden Maps IMMER sortiert und zwar anhand der Keys.
Einfaches Beispielt welches das gut darstellt:
Code: Alles auswählen
Global NewMap firstTestMap.s()
Global NewMap secondTestMap.s()
firstTestMap("2") = "Charly"
firstTestMap("3") = "Alpha"
firstTestMap("1") = "Bravo"
secondTestMap("1") = "Charly"
secondTestMap("2") = "Alpha"
secondTestMap("3") = "Bravo"
Debug "show first Map values:"
ResetMap(firstTestMap())
While NextMapElement(firstTestMap())
Debug "key: "+MapKey(firstTestMap())+" value:"+firstTestMap()
Wend
Debug"--------------------"
Debug "show second Map values:"
ResetMap(secondTestMap())
While NextMapElement(secondTestMap())
Debug "key: "+MapKey(secondTestMap())+" value:"+secondTestMap()
Wend
Wie zu sehen wird die Map PB intern immer anhand des Keys Sortiert.
Re: Map in Structuren werden nicht sortiert
Verfasst: 02.12.2019 04:00
von Josh
Aus 3 Mapeinträgen etwas zu schlussfolgern, ist schon etwas gewagt. Fakt ist, die Reihenfolge der Mapeinträge ist nicht vorhersehbar. Zufällig ist sie nicht, da die Hashwerte ja berechnet werden.
Code: Alles auswählen
NewMap MyMap()
For i = 1 To 1000
MyMap ("" + i) = i
Next
ForEach MyMap()
Debug MapKey (MyMap()) + " - " + MyMap()
Next
Wenn du eine Map brauchst, die du gleichzeitig sortieren kannst, dann brauchst du eine Pointermap die auf eine List zeigt. Die List kannst du dann sortieren.
Re: Map in Structuren werden nicht sortiert
Verfasst: 02.12.2019 07:51
von Nino
nicolaus hat geschrieben:Was aber PB macht ist etwas verwirrend denn in PB werden Maps IMMER sortiert und zwar anhand der Keys.
Dieser Unsinn wird nicht dadurch richtig, dass er wiederholt wird, auch nicht nach über 8 Jahren.
Josh hat geschrieben:Aus 3 Mapeinträgen etwas zu schlussfolgern, ist schon etwas gewagt.
Ja ... und das ist noch sehr freundlich ausgedrückt ...
Re: Map in Structuren werden nicht sortiert
Verfasst: 02.12.2019 12:08
von mhs
nicolaus hat geschrieben:
...
Wie zu sehen wird die Map PB intern immer anhand des Keys Sortiert.
Jetzt hab ich mich glatt darauf verlassen...
Code: Alles auswählen
For i = 0 To 100
firstTestMap(Str(i)) = Str(i)
Next i
oder auch
For i = 100 To 0 Step -1
firstTestMap(Str(i)) = Str(i)
Next i
[11:05:13] [Debug] key: 88 value:88
[11:05:13] [Debug] key: 89 value:89
[11:05:13] [Debug] key: 0 value:0
[11:05:13] [Debug] key: 1 value:1
[11:05:13] [Debug] key: 2 value:2
[11:05:13] [Debug] key: 3 value:3
[11:05:13] [Debug] key: 4 value:4
[11:05:13] [Debug] key: 5 value:5
[11:05:13] [Debug] key: 6 value:6
[11:05:13] [Debug] key: 7 value:7
[11:05:13] [Debug] key: 90 value:90
[11:05:13] [Debug] key: 8 value:8
[11:05:13] [Debug] key: 91 value:91
[11:05:13] [Debug] key: 9 value:9
[11:05:13] [Debug] key: 92 value:92
[11:05:13] [Debug] key: 93 value:93
[11:05:13] [Debug] key: 94 value:94
[11:05:13] [Debug] key: 95 value:95
[11:05:13] [Debug] key: 96 value:96
[11:05:13] [Debug] key: 97 value:97
[11:05:13] [Debug] key: 10 value:10
[11:05:13] [Debug] key: 98 value:98
[11:05:13] [Debug] key: 11 value:11
[11:05:13] [Debug] key: 99 value:99
[11:05:13] [Debug] key: 12 value:12
[11:05:13] [Debug] key: 13 value:13
[11:05:13] [Debug] key: 14 value:14
[11:05:13] [Debug] key: 15 value:15
[11:05:13] [Debug] key: 16 value:16
[11:05:13] [Debug] key: 17 value:17
[11:05:13] [Debug] key: 18 value:18
[11:05:13] [Debug] key: 19 value:19
[11:05:13] [Debug] key: 20 value:20
[11:05:13] [Debug] key: 21 value:21
[11:05:13] [Debug] key: 22 value:22
[11:05:13] [Debug] key: 23 value:23
[11:05:13] [Debug] key: 24 value:24
[11:05:13] [Debug] key: 25 value:25
[11:05:13] [Debug] key: 26 value:26
[11:05:13] [Debug] key: 27 value:27
[11:05:13] [Debug] key: 28 value:28
[11:05:13] [Debug] key: 29 value:29
[11:05:13] [Debug] key: 30 value:30
[11:05:13] [Debug] key: 31 value:31
[11:05:13] [Debug] key: 32 value:32
[11:05:13] [Debug] key: 33 value:33
[11:05:13] [Debug] key: 34 value:34
[11:05:13] [Debug] key: 35 value:35
[11:05:13] [Debug] key: 36 value:36
[11:05:13] [Debug] key: 37 value:37
[11:05:13] [Debug] key: 38 value:38
[11:05:13] [Debug] key: 39 value:39
[11:05:13] [Debug] key: 40 value:40
[11:05:13] [Debug] key: 41 value:41
[11:05:13] [Debug] key: 42 value:42
[11:05:13] [Debug] key: 43 value:43
[11:05:13] [Debug] key: 44 value:44
[11:05:13] [Debug] key: 45 value:45
[11:05:13] [Debug] key: 46 value:46
[11:05:13] [Debug] key: 47 value:47
[11:05:13] [Debug] key: 48 value:48
[11:05:13] [Debug] key: 49 value:49
[11:05:13] [Debug] key: 50 value:50
[11:05:13] [Debug] key: 51 value:51
[11:05:13] [Debug] key: 52 value:52
[11:05:13] [Debug] key: 53 value:53
[11:05:13] [Debug] key: 54 value:54
[11:05:13] [Debug] key: 55 value:55
[11:05:13] [Debug] key: 56 value:56
[11:05:13] [Debug] key: 57 value:57
[11:05:13] [Debug] key: 58 value:58
[11:05:13] [Debug] key: 59 value:59
[11:05:13] [Debug] key: 60 value:60
[11:05:13] [Debug] key: 61 value:61
[11:05:13] [Debug] key: 62 value:62
[11:05:13] [Debug] key: 63 value:63
[11:05:13] [Debug] key: 64 value:64
[11:05:13] [Debug] key: 65 value:65
[11:05:13] [Debug] key: 66 value:66
[11:05:13] [Debug] key: 67 value:67
[11:05:13] [Debug] key: 68 value:68
[11:05:13] [Debug] key: 69 value:69
[11:05:13] [Debug] key: 100 value:100
[11:05:13] [Debug] key: 70 value:70
[11:05:13] [Debug] key: 71 value:71
[11:05:13] [Debug] key: 72 value:72
[11:05:13] [Debug] key: 73 value:73
[11:05:13] [Debug] key: 74 value:74
[11:05:13] [Debug] key: 75 value:75
[11:05:13] [Debug] key: 76 value:76
[11:05:13] [Debug] key: 77 value:77
[11:05:13] [Debug] key: 78 value:78
[11:05:13] [Debug] key: 79 value:79
[11:05:13] [Debug] key: 80 value:80
[11:05:13] [Debug] key: 81 value:81
[11:05:13] [Debug] key: 82 value:82
[11:05:13] [Debug] key: 83 value:83
[11:05:13] [Debug] key: 84 value:84
[11:05:13] [Debug] key: 85 value:85
[11:05:13] [Debug] key: 86 value:86
[11:05:13] [Debug] key: 87 value:87