CFLib.org – Common Function Library Project

ArrayOfStructsSort(aofS, key[, sortOrder][, sortType][, delim])

Last updated April 4, 2013

author

Nathan Dintenfass

Version: 1 | Requires: CF5 | 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:

<cfscript>
	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:

/**
 * Sorts an array of structures based on a key in the structures.
 * 
 * @param aofS 	 Array of structures. (Required)
 * @param key 	 Key to sort by. (Required)
 * @param sortOrder 	 Order to sort by, asc or desc. (Optional)
 * @param sortType 	 Text, textnocase, or numeric. (Optional)
 * @param delim 	 Delimiter used for temporary data storage. Must not exist in data. Defaults to a period. (Optional)
 * @return Returns a sorted array. 
 * @author Nathan Dintenfass (nathan@changemedia.com) 
 * @version 1, April 4, 2013 
 */
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;
}
blog comments powered by Disqus

Search CFLib.org


Latest Additions

Kevin Cotton added
date2ExcelDate
May 5, 2016

Raymond Camden added
CapFirst
April 25, 2016

Chris Wigginton added
loremIpsum
January 18, 2016

Gary Stanton added
calculateArrival...
November 19, 2015

Sebastiaan Naafs - van Dijk added
getDaysInQuarter
November 13, 2015

Created by Raymond Camden / Design by Justin Johnson