On Fri, Jan 11, 2019 at 03:20:20PM +0000, Head Scratcher via Digitalmars-d-learn wrote: > I am just learning D. So far, I am impressed by its elegance and power. > > I have an associative array bool[string]. I want to filter it by value > (!bool), then extract the keys and sort them. I am struggling with the > syntax and working with ranges. I can't find any documentation related to > filtering associative arrays. > > This is what I currently have, but it doesn't compile: > > auto sortedStrings = myAssocArray.byKeyValue.filter!((string k,value) => > !value).assocArray.keys.sort();
I recommend using std.array.byPair rather than .byKeyValue, like this: auto sortedStrings = myAssocArray.byPair .filter!(pair => !pair[1]) // pair[1] is the value .map!(pair => pair[0]) // pair[0] is the key .array .sort; The .array call is needed because .byPair returns a non-random access range, which cannot be sorted. So you need to create an array first then sort that. Also, there's no need to reconstruct another AA with the filtered entries -- it allocates a new AA which is wasteful. All you really need is the filter the keys, then sort the keys. T -- If the comments and the code disagree, it's likely that *both* are wrong. -- Christopher