How to make a struct containing an associative array to deeply copy (for repeated usage in foreach) ?

monkyyy crazymonkyyy at gmail.com
Fri Mar 15 17:15:56 UTC 2024


On Friday, 15 March 2024 at 09:03:25 UTC, rkompass wrote:
> @Monkyyy: I adopted your solution, it is perfect.
>
> I only have one problem left:
>
> The foreach loop with associative arrays has two cases:
>
> `foreach(key, val; arr)` and `foreach(x; arr)`.
> In the second case only the values are iterated.
> With the present solution the iteration delivers (key, val) 
> tuples.

That will not be fixed in d2 ranges and has no good solutions; 
and my affect over d3 seems to be none. You could ask around for 
the "opApply" solution but I dont know it well (and prefer ranges)

d2 Ranges are based on a simplification of stl's ideas and stl 
doesn't support arrays-like iteration well, I wish to change that 
and working on a proof of concept algorthims lib... but well, 
this is unlikely to work.

For d3 if changing the range interface fails, expect to see style 
guides say "prefer explict range starters" string.byUnicode and 
string.byAscii will probably be how they kill `autodecoding` and 
your data stucture having 2 range functions as `byKey` and 
`byKeyValue` will look the same.

> Should I do an improvement request somewhere?

I think its been kinda of piecemeal and D1 1D(repetition 
intentional) opSlice is in limbo(it was deprecated, and then 
slightly undepercated in some random chats, its a mess)

for completeness I believe the current state of 1d op overloads 
are:

opIndex(int)
opIndex(key)
opSlice()
opSlice(int, int)
int opDollar()
dollar opDollar()
opSlice(int, dollar)
opBinararyRight("in",K)(key) (opIn was deprecated and shouldn't 
have been)

If your confident in your writing ability id suggest a clean 
slate article based on this list and what the compiler actually 
does(maybe ask around for any I missed) rather than trying to 
untangle this mess

Or write a dip thread "undeperacate d1 opOverloads that are still 
wanted by everyone") and try to bring back opIn at the same time 
and get the limboness of old technically deprecated 1d array 
opOverloads officially gone


More information about the Digitalmars-d-learn mailing list