After a few rants and rumblings, it's time for something CF related. Once again I want to talk about a function that is not widely known/used: structSort. structSort allows you to take a collection of structs and sort them by a key.

So, imagine you have a struct of structs:

kids = structNew();
for(x=1; x lte 5; x=x+1) {
   kids["Child #x#"] = structNew();
   kids["Child #x#"] .age = randRange(1,5);
   kids["Child #x#"] .name = "Child #x#";
   kids["Child #x#"].complex = structNew();
   kids["Child #x#"].complex.x = randRange(1,10);
}

structSort will allow you to sort "kids" by age, name, or even complex substructs, in this case, the complex.x key. The basic usage of structSort is:

structSort(struct, type of sort, direction of sort, path to sort);

So, to sort my above data by age, I can use:

orderedKids = structSort(kids,"numeric","asc","age");

structSort returns an array of keys, where the key represents one of the children in my kids struct. I can then loop over my array to display my struct of structs in an ordered fashion. To search the more complex aspect of the struct, I just use the proper path:

complexOrder = structSort(kids,"numeric","asc","complex.x");

One thing to watch out for - when you type in "structSort(" in DWMX2004, it incorrectly tells you that the 2nd argument is the path. (Which would actually make more sense.) HomeSite+ does not have this issue.