Just started looking at D this weekend, coming from a C++/Java/Go/Rust background and it's really not going well. Trying to write something to play with the language and need a linked list, looking in std.container you have a single or doubly linked list...great.

Now how to I iterate over it and look for a value and then modify it, and maybe insert a new element before or after that element.....After spending way to long on the API realized I need to be looking at std.range (I think, maybe not, I'm not sure).

So off to the std.range documentation, which recommended reading http://ddili.org/ders/d.en/ranges.html, okay read that, boy if I want to display the contents of range I'm ALL set, to bad I would like to modify a list, so I seem to be no closer to my goal....oh and by the way if you think:

import std.stdio;
import std.range;

void main() {
    int[] slice = [ 1, 2, 3 ];
    int[] slice2 = slice;

    put(slice2, 100);

    writeln(slice2);
    writeln(slice);
}

Resulting in:

[2, 3]
[100, 2, 3]    ← expected result

Is obvious, I have some bad news for you.

Now I'm thinking maybe std.algorithm.comparison, maybe iteration or maybe mutation seems promising, at least that's what I want to do, mutate a list....hey there is a swap...oh it doesn't deal with ranges...

Maybe swapAt but that sounds like I need an index, and indexes with linked list don't really perform well...but it does take a range....okay I think that is what I need, so in a foreach loop, looking at https://tour.dlang.org/tour/en/basics/ranges I would call swapAt and pass in __rangeCopy, I think I can update, happy days, now to figure out how to add something before or after that element......


So in short I guess my complaint is that you show all this stuff about displaying ranges and removing items from the front or end...so if I want a queue we're set, but nothing about modifying them...unless it's so blatantly obvious I'm just missing it, which could be the case.

Reply via email to