On Thu, Feb 09, 2012 at 10:30:22AM -0800, Ali Çehreli wrote:
[...]
> But if you don't actually want to modify the data, you can merely
> access the elements in-place by std.range.chain:
> 
> import std.stdio;
> import std.range;
> 
> void main()
> {
>     int[] arr = [0,1,2,3,4,5,6,7,8,9];
>     immutable position = arr.length / 2;
>     immutable newValue = 42;
> 
>     auto r = chain(arr[0 .. position], [ newValue ], arr[position +
> 1 .. $]);
>     writeln(r);
> }
> 
> 'r' above is a lazy range that just provides access to the three
> ranges given to it. 'arr' does not change in any way.
[...]

Wow! This is really cool. So you *can* have O(1) insertions in the
middle of an array after all. :)

Of course, you probably want to flatten it once in a while to keep
random access cost from skyrocketing. (I'm assuming delegates or
something equivalent are involved in generating the lazy range?)


T

-- 
Give a man a fish, and he eats once. Teach a man to fish, and he will sit 
forever.

Reply via email to