How do I use CTFE to generate an immutable associative array at compile time?

Chad Joan via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Feb 21 15:30:52 PST 2017


On Tuesday, 21 February 2017 at 22:43:15 UTC, H. S. Teoh wrote:
>
> Parsing strings at program startup is ugly and slow.  What 
> about parsing at compile-time with CTFE into an array literal 
> and transforming that into an AA at startup, which should be a 
> lot faster?
>
> 	// Warning: untested code
> 	pure string[2][] parseTwoColumnCsv(string inputCsv)
> 	{
> 		import std.csv;
> 		import std.typecons;
>
> 		string[2][] result;
> 		foreach (record; csvReader!(Tuple!(string,string))(inputCsv)) 
> {
> 			result ~= [record[0], record[1]];
> 		}
> 		return result;
> 	}
>
> 	immutable string[string] dataLookup;
> 	static this()
> 	{
> 		enum halfCookedData = 
> parseTwoColumnCsv(import("some_data.csv"));
> 		foreach (p; halfCookedData) {
> 			dataLookup[p[0]] = p[1];
> 		}
> 	}
>
>
> T

Hi,

That makes a lot of sense and it had crossed my mind.

In my case the data sets are super small, so I'm probably going 
to be lazy/productive and leave it the way it is.

Anyone else from the internet copying these examples: try to just 
do it H.S. Teoh's way from the start ;)

Thanks for the suggestion.
- Chad


More information about the Digitalmars-d-learn mailing list