iterate over enum name:value pairs

Jay Norwood jayn at prismnet.com
Sun Dec 8 13:28:07 PST 2013


Yes, thanks, that syntax does work for the initialization.

The C syntax that failed for me was using the curly brace form 
shown in the following link.

http://www.c4learn.com/c-programming/c-initializing-array-of-structure/

Also, I think I was trying forms of defining the struct and 
initializing the array in the same line... something like this C:
static struct Suit{ int i; long lv;} suits[3] = {{1, 2L},{2, 
4L},{3,9L}};

It looks to me like D requires a named struct definition in a 
separate line from the array  definition.  If that is so, then 
the C initialization of an array with an unnamed struct type, 
like this, would require a struct type name.

static struct { int i; long lv;} suits[3] = {{1, 2L},{2, 
4L},{3,9L}};

So, from your static intialization example, this works.

Also, the conversion of struct to tuple makes the writefln 
tupleof conversion on the struct a little cleaner, since you only 
have to specify the single tuple parameter.


module main;

import std.stdio;

void main()
{
	struct Suit {string nm; int val; int val2; string shortNm;};

	static Suit[5] suits =  [
		{"spades",1,6,"spd"},
		{"hearts",4,10,"hrt"},
		{"hearts2",4,10,"hrt2"},
		{"diamonds",10,16,"dmd"},
		{"clubs",11,17,"clb"}
		];
	
     foreach (member;  suits)
     {
	auto tup = member.tupleof;
	writefln("%s %d %d %s", tup);
     }

}

prints
spades 1 6 spd
hearts 4 10 hrt
hearts2 4 10 hrt2
diamonds 10 16 dmd
clubs 11 17 clb

I also tried using writefln(tup) and writeln(tup) in the example 
above.  The output from writeln(tup) looks like it is headed in 
the right direction.  Maybe a writecsv(tup) would be useful.

spades16spd
hearts410hrt
hearts2410hrt2
diamonds1016dmd
clubs1117clb


More information about the Digitalmars-d-learn mailing list