基于第一个example in this blog post,我有一个隐式结构的隐式数组。我的数据实际上非常相似,例如:
<cfset ReportsArray = [
{
Name = "My First Report",
Group = "Group One"
},
{
Name = "My Second Report",
Group = "Group Two"
},
{
Name = "My Third Report"
Group = "Group One"
},
...etc...
]>
我决定以这种格式创建数据,以便稍后可以将新报告推送到任何组中的数组,或者只需在需要时使用新的报告列表重写数组。我想知道是否可以根据&#34; Group&#34;对这个数组进行排序。键入结构,以便我可以遍历它们并输出如下内容:
第一组
我的第一份报告
我的第三份报告
第二组
我的第二份报告
-
这有意义吗?或者我错了吗?
答案 0 :(得分:5)
也许Query对于正确的工作来说是正确的数据类型?使用ColdFusion着名的查询查询,像这样排序数据是件小事。
如果你真的想要对一组对象进行排序,并且你在CF10 +中,那么你很幸运。您可以将ArraySort与回调一起使用:https://wikidocs.adobe.com/wiki/display/coldfusionen/ArraySort。
如果你坚持,这里有一个易于阅读的泡泡排序,可以在CF8中使用:
<cfscript>
function sortReports(reports)
{
var local = {};
local.sorted = false;
local.reportSize = arrayLen(reports);
while (!local.sorted)
{
local.sorted = true;
for (local.i = 1; local.i < local.reportSize ; local.i = local.i + 1)
{
local.report1 = reports[local.i];
local.report2 = reports[local.i + 1];
if (local.report1.group > local.report2.group)
{
arraySwap(reports, local.i, local.i + 1);
local.sorted = false;
}
}
}
return reports;
}
reportsArray = [
{
Name = "My First Report",
Group = "Group One"
},
{
Name = "My Second Report",
Group = "Group Two"
},
{
Name = "My Third Report",
Group = "Group One"
}
];
</cfscript>
<cfdump var="#sortReports(reportsArray)#">
答案 1 :(得分:4)
有一个quicksort()
function on CFLib需要一个比较器回调,只需用它来对你的数组进行排序。
你需要编写比较器函数,但就是这样:
function reportComparator(e1, e2){
return compare(e1.group, e2.group);
}