digitalmars.D.learn - sort keys in an associative array?
- clayasaurus (23/23) Sep 11 2005 Can I sort the key order in an associative array?
- Jarrett Billingsley (23/25) Sep 11 2005 The AA.keys property only returns an array that is a representation of t...
- clayasaurus (4/43) Sep 11 2005 Thanks. I think it will help but I'm still going to check out other
- Ben Hinkle (24/47) Sep 11 2005 The MinTL library supports 2 assoc array types with sorting: HashAA and
Can I sort the key order in an associative array? It doesn't work with this example below... //////////////////////////////////////////////////////// //Ex: Trying to sort assoc array key order //////////////////////////////////////////////////////// import std.stdio; int main() { int[int] array; array[0] = 3; array[100] = 1; array[4] = 10; array.keys.sort; // i want the new key order to be 0, 4, 100 foreach(int key; array.keys) { writefln("key(",key,")"); } // prints 0, 100, 4 return 0; } Thanks ahead to anyone who knows the answer. ~ Clay
Sep 11 2005
"clayasaurus" <clayasaurus gmail.com> wrote in message news:dg1io2$2mg2$1 digitaldaemon.com...Can I sort the key order in an associative array? It doesn't work with this example below...The AA.keys property only returns an array that is a representation of the keys in the AA; thus, sorting the array returned by AA.keys does not affect the original AA. Since the AA is laid out in a nonlinear format, it wouldn't really be possible to sort the key-value pairs. What you can do, however, is get the keys array, sort it, and loop through it, accessing the values in the AA by using the keys array. Like so: import std.stdio; void main() { int[int] array; array[0] = 3; array[100] = 1; array[4] = 10; int[] keys = array.keys; keys.sort; foreach(int i; keys) { writefln("array[",i,"] = ",array[i]); } } Hope that helps!
Sep 11 2005
Jarrett Billingsley wrote:"clayasaurus" <clayasaurus gmail.com> wrote in message news:dg1io2$2mg2$1 digitaldaemon.com...Thanks. I think it will help but I'm still going to check out other solutions. ~ ClayCan I sort the key order in an associative array? It doesn't work with this example below...The AA.keys property only returns an array that is a representation of the keys in the AA; thus, sorting the array returned by AA.keys does not affect the original AA. Since the AA is laid out in a nonlinear format, it wouldn't really be possible to sort the key-value pairs. What you can do, however, is get the keys array, sort it, and loop through it, accessing the values in the AA by using the keys array. Like so: import std.stdio; void main() { int[int] array; array[0] = 3; array[100] = 1; array[4] = 10; int[] keys = array.keys; keys.sort; foreach(int i; keys) { writefln("array[",i,"] = ",array[i]); } } Hope that helps!
Sep 11 2005
"clayasaurus" <clayasaurus gmail.com> wrote in message news:dg1io2$2mg2$1 digitaldaemon.com...Can I sort the key order in an associative array?The MinTL library supports 2 assoc array types with sorting: HashAA and SortedAA. A HashAA is a hashtable with links between the nodes so that foreach traversals happen in a predictable (and sortable) order. A SortedAA is a red-black tree that maintains items in a specific order at all times. I've modified your code below to use HashAA as an example import std.stdio; import mintl.hashaa; int main() { HashAA!(int,int) array; array[0] = 3; array[100] = 1; array[4] = 10; array.sort; // i want the new key order to be 0, 4, 100 foreach(int key; array.keys) { writefln("key(",key,")"); } // prints 0, 100, 4 return 0; }It doesn't work with this example below... //////////////////////////////////////////////////////// //Ex: Trying to sort assoc array key order //////////////////////////////////////////////////////// import std.stdio; int main() { int[int] array; array[0] = 3; array[100] = 1; array[4] = 10; array.keys.sort; // i want the new key order to be 0, 4, 100 foreach(int key; array.keys) { writefln("key(",key,")"); } // prints 0, 100, 4 return 0; } Thanks ahead to anyone who knows the answer. ~ Clay
Sep 11 2005