Static Initialization of Associative Arrays
    badmadevil 
    badmadevil at gmail.com
       
    Mon Mar 31 06:31:00 PDT 2008
    
    
  
Jarrett Billingsley wrote:
> "Tyro[a.c.edwards]" <no at spam.com> wrote in message 
> news:fspu6h$2kps$1 at digitalmars.com...
>> D v2.012 currently allows the following:
>>
>> int[char[]] eroMatrix = ["SA":1, "SB":2, "SP":3, "KK":4];
>> foreach(k, v; eroMatrix)
>>  writefln(k, "->", v);
>>
>> // output:
>> SA->1
>> SB->2
>> SP->3
>> KK->4
>>
>> However attempts to directly access a "key:value" pair results in an 
>> ArrayBoundsError. Any idea why? Is there a temporary workaround available?
>>
>> writefln(eroMatrix["SA"]) // ArrayBoundsError
>>
>> Thanks,
>> Andrew
> 
> I would have expected something like:
> 
> writefln(eroMatrix[eroMatrix.keys[0]]);
> 
> to work, but it doesn't.
> 
> O_o 
> 
It seems matter only the _method_ of initialization.
int[char[]] eroMatrix = ["SA":1, "SB":2, "SP":3, "KK":4]; // literal
eroMatrix["00"]	= 9 ; // direct
foreach(k; eroMatrix.keys.sort) {
	writef(k, "->", typeid(typeof(k)), "->") ;
	writefln( eroMatrix[k]);
  }
 >>> OUTPUT:
00->const(char)[]->9
KK->const(char)[]->
Error: ArrayBoundsError aatst(10)
PS:D 2.0 change the key's type from char[] to const(char)[], D 1.0 not.
> 
    
    
More information about the Digitalmars-d-learn
mailing list