Für allgemeine Fragen zur Programmierung mit PureBasic.
nicolaus
Moderator
Beiträge: 1175 Registriert: 11.09.2004 13:09
Kontaktdaten:
Beitrag
von nicolaus » 02.12.2019 03:11
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.
Josh
Beiträge: 1028 Registriert: 04.08.2009 17:24
Beitrag
von Josh » 02.12.2019 04:00
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.
Nino
Beiträge: 1300 Registriert: 13.05.2010 09:26
Wohnort: Berlin
Beitrag
von Nino » 02.12.2019 07:51
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 ...
mhs
Beiträge: 224 Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:
Beitrag
von mhs » 02.12.2019 12:08
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