Slices, appending to arbitrary position
bearophile
bearophileHUGS at lycos.com
Mon Dec 30 10:32:55 PST 2013
Dfr:
> string[] a;
> a[10] = "hello";
>
> Gives me: core.exception.RangeError: Range violation
Because 'a' has length 0, so the position with index 11 doesn't
exists in the array.
By the way, this is not an "appending", it's a (failed)
assignment.
> I know about this way:
>
> string[] a;
> a = new string[11];
> a[10] = "hello";
>
> But what if i need do this many times with the same array like
> this:
>
> a[10] = "a";
> ...
> a[1] = "b";
> ..
> a[1000] = "c";
>
> If i will call "a = new string[11]" all those many times, isn't
> this will be inefficient ? Also it will clear all previous
> contents of "a", which is not suitable.
If you need to assign strings randomly then a good solution is to
use an associative array, that is a quite different data
structure:
string[int] aa;
aa[10] = "a";
aa[1] = "b";
aa[1000] = "c";
As alternative if you want a normal dynamic array, you can resize
it:
string[int] a;
a.length = max(a.length, 10 + 1);
a[10] = "a";
a.length = max(a.length, 1 + 1);
a[1] = "b";
a.length = max(a.length, 1000 + 1);
a[1000] = "c";
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list