Associative Array Problem
Steven Schveighoffer
schveiguy at yahoo.com
Mon Mar 24 12:59:18 PDT 2008
"Wolftousen Frozenwind" wrote
> I'm trying to have an associative array with the key value of type ushort.
> \
> struct struct_name
> {
> int variable_name;
> }
>
> ushort[some_number] keys;
>
> //fill keys
>
> //declare my associative array
> struct_name[ushort] data;
>
> //in a loop, filling data
> for(x = 0; x < keys.length; x++)
> data[keys[x]].variable_name = some_int;
>
> I get an array out of bounds error when running this. Any one help?
two problems in your for loop. One is:
for(x = 0; x < keys.length; x++)
Since keys is an associative array, the keys are not guaranteed to be
sequential. You should do:
foreach(x; keys) // compiler implies that x is the value type of your AA.
This also is more efficient than doing the key lookup for each loop.
The second problem is your data statement. Just accessing an array element
does not create it (this is unlike C++'s std::map). You must create it with
an assign statement:
foreach(x; keys)
{
struct_name sn;
sn.variable_name = some_int;
data[x] = sn; // this creates the element in the array.
}
-Steve
More information about the Digitalmars-d-learn
mailing list