Finding the index of the maximum value in an associative array

John Colvin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 1 08:14:34 PDT 2017


On Tuesday, 30 May 2017 at 18:05:07 UTC, H. S. Teoh wrote:
> On Tue, May 30, 2017 at 05:57:04PM +0000, Lyle via 
> Digitalmars-d-learn wrote:
>> Hi,
>> 
>> I have an associative array of type int[ulong] and I'm trying 
>> to get the index of the maximum value, like this:
>> 
>> int[ulong] aa = [1UL: 2000,
>>                  2UL: 5000,
>>                  5UL: 1000];
>> 
>> writeln(aa.maxIndex); // should print 2
>> 
>> Can anyone help me out?
> [...]
>
> Try this:
>
> 	void main() {
> 		import std.algorithm.iteration : fold;
> 		import std.array : byPair;
> 		import std.stdio : writeln;
>
> 		int[ulong] aa = [1UL: 2000,
> 				2UL: 5000,
> 				5UL: 1000];
>
> 		writeln(aa.byPair
> 			  .fold!((a,b) => a[1] < b[1] ? b : a)[0]);
> 	}

writeln(aa.byPair.maxElement!(p => p[1])[0]);

or with https://github.com/dlang/phobos/pull/5436 :

writeln(aa.byPair.maxElement!(p => p.value).key);


More information about the Digitalmars-d-learn mailing list