在Coldfusion中对2D数组进行排序

时间:2014-11-22 11:43:10

标签: arrays sorting coldfusion

我有一个数组,我想根据2个值排序。第一个工作正常,但我似乎无法得到第二个正确的

这就是我根据第一个值排序的方式:

<cfloop index="outer" from="1" to="#arrayLen(result)#">
    <cfloop index="inner" from="1" to="#arrayLen(result)-1#">
        <cfif result[inner][7] lt result[outer][7]>
            <cfset arraySwap(result,inner,outer)>
        </cfif>
    </cfloop>
</cfloop>

我想要排序的第二个值不是数值,而是姓氏。它是数组中的第二项

我怎样才能按数组中的这两个值进行排序,两者都必须降序。我也不想按姓氏的长度排序,而是按字母顺序排序

1 个答案:

答案 0 :(得分:0)

正如Adam Cameron指出的那样,如果您拥有大型数据集,嵌套循环可能会变得非常沉重。对于使用较旧CF的人,我会留下我以前的代码。

但是,如果您有CF10 / Railo 4或更高版本,以下代码应该更适合您。它产生完全相同的结果,同时更快。

如下所示,这仍然使用基本的模型数组和第二个元素与OP的第七个元素(在他更复杂的数据集中)。

<cfset Result = [["dan","smith"],["dan","Johnson"],["bob","jones"],["dan","smith"],["dan","johnson"],["bob","jones"],["cfquery","param"],["steve","buscemi"],["dan","smith"],["dan","johnson"],["bob","jones"]]>

<Cfset arraySort(result, function (current_element, next_element) {
    return comparenocase(current_element[2], next_element[2]);
  })>

<cfdump var="#result#">

您可以通过比较名字或任何其他数据来迈出这一步(或更进一步)。

<cfset Result = [["dan2","smith"],["dan1","Johnson"],["bob","jones"],["dan3","smith"],["dan0","johnson"],["bob","jones"],["cfquery","param"],["steve","buscemi"],["dan","smith"],["dan","johnson"],["bob","jones"]]>

<Cfset arraySort(result, function (current_element, next_element) {
    return comparenocase("#current_element[2]#, #current_element[1]#", "#next_element[2]#, #next_element[1]#");
  })>

<cfdump var="#result#">

更新:使用旧版本CF想要复制此内容的人可能希望用户&#34;亨利&#34;

查看this answer