Slices, appending to arbitrary position
Dfr
deflexor at yandex.ru
Mon Dec 30 10:40:24 PST 2013
Thank you for replies, i think here i can use assoc array, but
sometimes it is not suitable because it is not preserve order.
> On Monday, 30 December 2013 at 18:19:54 UTC, Dfr wrote:
>> This simple example:
>>
>> string[] a;
>> a[10] = "hello";
>>
>> Gives me: core.exception.RangeError: Range violation
>>
>> 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";
>
> Does it *need* to be an array for some reason?
> If so, resize the array prior.
>
> Something like:
>
> // index is the position you're changing
> // value is the value you're changing to
> if(a.length <= index) {
> a.length = index+1;
> }
> a[index] = value;
>
> If you're just mapping integers to strings, then you're
> probably looking for an associative array:
> http://dlang.org/hash-map.html
>
> This is probably more like what you actually want:
>
> string[size_t] a;
> a[1] = "works fine";
> a[10] = "also works fine";
>
>
>
>> isn't this will be inefficient ?
>
> Yes. Resizing the array many times is very inefficient. Either
> use an associative array or know ahead of time what your
> array's length needs to be (or, at least, what it will "likely"
> need to be).
More information about the Digitalmars-d-learn
mailing list