www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - sort associative array on values

reply "Jan Hanselaer" <jan.hanselaer gmail.com> writes:
Hi,

It is easy to output a associative array sorted on his keys but does anyone 
know how to do it with the values sorted?

I use associative arrays for frequency tables (for char[] en char) and I 
would like to output those sorted by value, and if that would be possible, 
also by key for equal values. Anyone ever tried this of has any ideas?

Thanks in advance!
Jan 
May 10 2007
parent Daniel Keep <daniel.keep.lists gmail.com> writes:
Jan Hanselaer wrote:
 Hi,
 
 It is easy to output a associative array sorted on his keys but does anyone 
 know how to do it with the values sorted?
 
 I use associative arrays for frequency tables (for char[] en char) and I 
 would like to output those sorted by value, and if that would be possible, 
 also by key for equal values. Anyone ever tried this of has any ideas?
 
 Thanks in advance!
 Jan 

I would imagine you would need a reverse mapping from value->key, sort that, and go from there. You could probably do it with an array of structs: struct ValueKey!(vT, kT) { vT value; kT key; int opCmp(ValueKey!(vT,kT) rhs) { return (value < rhs.value) : -1 ? ((key < rhs.key) : -1 ? 1); } } ValueKey!(vT,kT)[] map; map.length = freq_aa.keys.length; size_t i = 0; foreach( k,v ; freq_aa ) map[i++] = ValueKey!(vT,kT)(v,k); map.sort; Note: not tested, but that should get you going in the right direction. -- Daniel -- int getRandomNumber() { return 4; // chosen by fair dice roll. // guaranteed to be random. } http://xkcd.com/ v2sw5+8Yhw5ln4+5pr6OFPma8u6+7Lw4Tm6+7l6+7D i28a2Xs3MSr2e4/6+7t4TNSMb6HTOp5en5g6RAHCP http://hackerkey.com/
May 10 2007