Finding the index of the maximum value in an associative array

H. S. Teoh via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue May 30 11:05:07 PDT 2017


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]);
	}

Note that an associative array really isn't the best data structure if
you'll be performing this operation frequently, because you'll be
iterating over the entire contents each time. You may want to consider
using a sorted container like a RedBlackTree in std.container or
something similar instead.


T

-- 
Ignorance is bliss... until you suffer the consequences!


More information about the Digitalmars-d-learn mailing list