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#">