Map in Structuren werden nicht sortiert

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Re: Map in Structuren werden nicht sortiert

Beitrag 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.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Map in Structuren werden nicht sortiert

Beitrag 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.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Map in Structuren werden nicht sortiert

Beitrag 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 ...
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Map in Structuren werden nicht sortiert

Beitrag 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
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Antworten