How to sort an array of structs in ColdFusion

后端 未结 10 1739
余生分开走
余生分开走 2020-12-17 10:00

I have an array of structs in ColdFusion. I\'d like to sort this array based on one of the attributes in the structs. How can I achieve this? I\'ve found the StructSort fun

10条回答
  •  攒了一身酷
    2020-12-17 10:17

    As usual, CFLib.org has exactly what you want.

    http://cflib.org/udf/ArrayOfStructsSort

    /**
    * 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;
    }
    

提交回复
热议问题