ArrayOfStructsSort(aofS, key [, sortOrder] [, sortType] [, delim])
Last updated December 10, 2001
Version: 1 | Requires: ColdFusion 5 | Library: DataManipulationLib
Description:
This function takes an array of structures and the name of a key in the structures and returns a new array of structures sorted by the key.
Return Values:
Returns a sorted array.
Example:
a = arraynew(1);
a[1] = structnew();
a[1].name = "Dintenfass";
a[1].number = 420;
a[2] = structnew();
a[2].name = "Archibald";
a[2].number = 999;
a[3] = structnew();
a[3].name = "Camden";
a[3].number = 123;
</cfscript>
UNSORTED:
<cfdump var="#a#">
SORTED BY NAME:
<cfdump var="#arrayOfStructsSort(a,"name")#">
SORTED BY NUMBER DESCENDING
<cfdump var="#arrayOfStructsSort(a,"number","desc","numeric")#">
Parameters:
| Name | Description | Required |
|---|---|---|
| aofS | Array of structures. | Yes |
| key | Key to sort by. | Yes |
| sortOrder | Order to sort by, asc or desc. | No |
| sortType | Text, textnocase, or numeric. | No |
| delim | Delimiter used for temporary data storage. Must not exist in data. Defaults to a period. | No |
Full UDF Source:
<cfscript>
/**
* Sorts an array of structures based on a key in the structures.
*
* @param aofS Array of structures.
* @param key Key to sort by.
* @param sortOrder Order to sort by, asc or desc.
* @param sortType Text, textnocase, or numeric.
* @param delim Delimiter used for temporary data storage. Must not exist in data. Defaults to a period.
* @return Returns a sorted array.
* @author Nathan Dintenfass (nathan@changemedia.com)
* @version 1, December 10, 2001
*/
function arrayOfStructsSort(aOfS,key){
//by default we'll use an ascending sort
var sortOrder = "asc";
//by default, we'll use a textnocase sort
var sortType = "textnocase";
//by default, use ascii character 30 as the delim
var delim = ".";
//make an array to hold the sort stuff
var sortArray = arraynew(1);
//make an array to return
var returnArray = arraynew(1);
//grab the number of elements in the array (used in the loops)
var count = arrayLen(aOfS);
//make a variable to use in the loop
var ii = 1;
//if there is a 3rd argument, set the sortOrder
if(arraylen(arguments) GT 2)
sortOrder = arguments[3];
//if there is a 4th argument, set the sortType
if(arraylen(arguments) GT 3)
sortType = arguments[4];
//if there is a 5th argument, set the delim
if(arraylen(arguments) GT 4)
delim = arguments[5];
//loop over the array of structs, building the sortArray
for(ii = 1; ii lte count; ii = ii + 1)
sortArray[ii] = aOfS[ii][key] & delim & ii;
//now sort the array
arraySort(sortArray,sortType,sortOrder);
//now build the return array
for(ii = 1; ii lte count; ii = ii + 1)
returnArray[ii] = aOfS[listLast(sortArray[ii],delim)];
//return the array
return returnArray;
}
</cfscript>
Search CFLib.org
Latest Additions
Tayo Akinmade added
arrayTrim
11 day(s) ago
Will Belden added
longTime
17 day(s) ago
James Sleeman added
quickSort
27 day(s) ago
Ben Forta added
GetHostAddress
30 day(s) ago
Top Rated
EksporSQLData
Rated 5.0, 16 time(s)
backupDatabase
Rated 5.0, 13 time(s)
indentXml
Rated 5.0, 10 time(s)
generateSsccAsn
Rated 5.0, 4 time(s)