Opened on Aug 6, 2023 at 11:07:45 AM
Last modified on Feb 17, 2024 at 3:41:52 PM
#3969 new Feature Request
Map Initializer List
| Reported by: | anonymous | Owned by: | |
|---|---|---|---|
| Milestone: | Component: | AutoIt | |
| Version: | Severity: | None | |
| Keywords: | Map, Initializer List | Cc: |
Description (last modified by )
; For Arrays, we can use Global $a = [1, 2, 3] ; or Global $a[] = [1, 2, 3] ; or Global $a[3] = [1, 2, 3] ; But if we create a Map, it is always empty, and there is no good way to initialize Maps. So here is a suggestion: Global $a["key1", "key2", "key3"] = [1, 2, 3] ; is the same as Global $a[] $a["key1"] = 1 $a["key2"] = 2 $a["key3"] = 3 ; I'm sure we do not "need" this feature, but it would be nice to have. (the same argument could be made for Array-Initialization with initializer list... we do not "need" it, but it is nice that it exists)
Attachments (0)
Change History (8)
comment:2 by , on Aug 22, 2023 at 2:54:31 PM
| Description: | modified (diff) |
|---|
comment:3 by , on Feb 2, 2024 at 5:29:03 PM
I use maps very often and I would like to see a map initializer but I don't know if it's possible without introducing a new operator, a keyword or something. It will be a total confusion. Take this as example:
Global $Var[1] = [5]
Right now this is a valid syntax to initialize an array with one element but it could be as well a map with the key name 1 (according to proposed syntax).
comment:4 by , on Feb 11, 2024 at 5:40:49 PM
Another reasoning to have such feature is ability create constant maps. Currently we have to create a temporary map, populate it, then copy it to a constant.:
; create temporary map Local $a[] $a["key1"] = 1 $a["key2"] = 2 $a["key3"] = 3 ; copy to a constant Global Const $b = $a ; clean up $a = null
comment:5 by , on Feb 14, 2024 at 10:39:42 AM
Please consider this proposition of a good non-ambiguous syntax:
Dim $map["prime": 101, -1: "-one", $hMyGUI: $aSomeAssociatedData]
-- or (which can be an allowed alternative, just like arrays have two ways to define 'em) --
Dim $map[] = ["prime": 101, -1: "-one", $hMyGUI: $aSomeAssociatedData]
comment:6 by , on Feb 14, 2024 at 10:41:59 AM
also
Dim $map = ["prime": 101, -1: "-one", $hMyGUI: $vSomeAssosiatedData]
comment:7 by , on Feb 17, 2024 at 12:24:02 AM
The syntax might work but the examples are bad since AutoIt maps are designed to work with integers and strings, not with handles or other data types as keys.
comment:8 by , on Feb 17, 2024 at 3:41:52 PM
Andreik, that only means that the maps are poorly designed -- and NOTHING else. It's not necessarily anyone's fault/guilt; after all, obtaining perfection(or even just good-enough-ness) is a progress (and i hasten to say that the maps in their current form are NOT good-enough: to be blunt, they're literally a worser version of Scripting.Dictionary -- that's it.) We're all now got involved(if only in spirit) in making maps progress further making them the best they can be(in bed AutoIt); now lets be optimistic and hope/believe it will be crowned with a resounding success!! :]
