通过struct key对隐式结构的隐式数组进行排序

时间:2014-12-02 19:16:29

标签: coldfusion coldfusion-8

基于第一个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;对这个数组进行排序。键入结构,以便我可以遍历它们并输出如下内容:

第一组

我的第一份报告

我的第三份报告

第二组

我的第二份报告

-

这有意义吗?或者我错了吗?

2 个答案:

答案 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)#">

在此处运行:http://www.trycf.com/scratch-pad/pastebin?id=RuSHgZYq

答案 1 :(得分:4)

有一个quicksort() function on CFLib需要一个比较器回调,只需用它来对你的数组进行排序。

你需要编写比较器函数,但就是这样:

function reportComparator(e1, e2){
    return compare(e1.group, e2.group);
}