Sorting 我该如何分类?

Sorting 我该如何分类?,sorting,coldfusion,coldfusion-10,Sorting,Coldfusion,Coldfusion 10,这里是我试图排序的数据转储 array 1 struct col 1 dataid 48 identifier 1 row 1 size_x 4 size_y 1 2 struct col 1 dataid

这里是我试图排序的数据转储

array
1   
     struct
         col           1
         dataid       48
         identifier    1
         row           1
         size_x        4
         size_y        1
2   
     struct
         col           1
         dataid       42
         identifier    2
         row           2
         size_x        2
         size_y        1
3   
     struct
         col           3
         dataid       45
         identifier    3
         row           2
         size_x        2
         size_y        1

我想先按
排序,然后按
排序。有很多示例介绍如何按一个数据元素进行排序,但没有一个示例介绍辅助元素。

ColdFusion 10内置了使用回调的自定义数组排序。的文档没有提到这一点,但我刚刚用一个例子更新了它们。我的示例没有显示您所需的复合排序,但它非常简单:

<cfscript>
comparator = function(e1, e2){
    e1.row += 0; // need to make sure it's not a string for the Java method call below
    var rowCompare = e1.row.compareTo(e2.row + 0);
    if (rowCompare !=0){
        return rowCompare;
    }
    e1.col += 0;
    return e1.col.compareTo(e2.col + 0);
};

data = [
    {row=3, col=3}, {row=3,col=2}, {row=3, col=1},
    {row=2, col=3}, {row=2,col=2}, {row=2, col=1},
    {row=1, col=3}, {row=1,col=2}, {row=1, col=1}
];

writeDump(var=data);
arraySort(data, comparator);
writeDump(var=data);
</cfscript>

比较器=功能(e1、e2){
e1.row+=0;//需要确保它不是下面Java方法调用的字符串
var rowCompare=e1.row.compareTo(e2.row+0);
如果(行比较!=0){
返回行比较;
}
e1.col+=0;
返回e1.col.compareTo(e2.col+0);
};
数据=[
{row=3,col=3},{row=3,col=2},{row=3,col=1},
{row=2,col=3},{row=2,col=2},{row=2,col=1},
{row=1,col=3},{row=1,col=2},{row=1,col=1}
];
writeDump(变量=数据);
arraySort(数据、比较);
writeDump(变量=数据);
这充分利用了CF数字是对象的优势。


//ColdFusion 10只支持这种新类型的结构声明
记录arr=[
{col:1,dataid:48,标识符:1,行:1,大小x:4,大小y:1},
{col:1,dataid:42,标识符:2,行:2,大小x:2,大小y:1},
{col:3,dataid:45,标识符:3,行:2,大小x:2,大小y:1}
];
//ColdFusion 10仅支持此新的queryNew()功能
queryObj=queryNew(“列、数据标识、标识符、行、大小x、大小y”,
“整数,整数,整数,整数,整数,整数,整数”,
recordArr);
按行ASC、列ASC从查询订单中选择*

您最初是从哪里获得该阵列的?是一种解决方案。您还可以编写自己的函数并实现自己的比较器函数,该函数使用行和列来确定哪个元素更大。ColdFusion的哪个版本?(oks更新了问题的标签)V10,我从gridster.js(添加了额外的元素)开始使用这个数组。
<cfscript>

    //ColdFusion 10 only supports this new types of struct declaration
    recordArr = [
            {col: 1,dataid:48,identifier:1,row:1,size_x:4,size_y:1},
            {col: 1,dataid:42,identifier:2,row:2,size_x:2,size_y:1},
            {col: 3,dataid:45,identifier:3,row:2,size_x:2,size_y:1}
    ];

    //ColdFusion 10 only supports this new queryNew() functionality
    queryObj = queryNew("col,dataid,identifier,row,size_x,size_y",
                        "Integer,Integer,Integer,Integer,Integer,Integer",
                        recordArr);
</cfscript>

<!--- Here it comes our favourite cfquery tag. We can apply order by clause 
as per our wish --->
<cfquery name="ordredResult" dbtype="query">
    SELECT * FROM queryObj ORDER BY row ASC, col ASC
</cfquery>

<!--- Here is the expected result --->
<cfdump var="#ordredResult#">