«

»

Aug 29

Print this Post

Como indexar (sort) uma array de duas dimensões?

ColdFusion não fornece uma maneira embutida de indexar uma array multi-dimensional. Entretanto, há dois modos de se executar essa tarefa.

1) Transforme a array multi-dimensional em uma query e então use query of queries para indexá-la.

<!--- sample array --->
<cfset arr = arrayNew(2)>
<cfset arr[1][1] = "beta">
<cfset arr[2][1] = "bar">
<cfset arr[3][1] = "foo">
<cfset arr[4][1] = "alpha">
<cfset arr[1][2] = "car">
<cfset arr[2][2] = "boat">
<cfset arr[3][2] = "bike">
<cfset arr[4][2] = "car">
<!--- convert array to CF query --->
<cfscript>
     myQuery = QueryNew("one,two");
     for (i=1; i LTE ArrayLen(arr); i=i+1) {
          newRow = QueryAddRow(myQuery);
          QuerySetCell(myQuery, "one", #arr[i][1]# );
          QuerySetCell(myQuery, "two", #arr[i][2]# );
     }
</cfscript>
<cfdump var= #myQuery#>
<!--- Sort --->
<cfquery name="qSort" dbtype = "query">
     SELECT *
     FROM myQuery
     ORDER BY one
</cfquery>
<cfdump var= #qSort#>


2) Voce pode indexar array de uma dimensão usando a função arraySort() interna do ColdFusion.. Então, com isto em mente, voce pode escolher as dimensões de array que quiser indexar e baixa-las para uma dinensão e então usar arraySort() nesta array de uma dimensão.

var sortArray = ArrayNew(1);
for (i=1; i LTE ArrayLen(arrayToSort); i=i+1) {
     ArrayAppend(sortArray, arrayToSort[i][sortColumn]);
}

É uma simples questão de re-ordenar o resto da sua array multi-dimensional baseado na nova ordem de índice da array de uma dimensão.

theList = ArrayToList(sortArray);
ArraySort(sortArray, type, order);
for (i=1; i LTE ArrayLen(sortArray); i=i+1) {
     thePosition = ListFind(theList, sortArray[i]);
     theList = ListDeleteAt(theList, thePosition);
     for (j=1; j LTE ArrayLen(arrayToSort[thePosition]); j=j+1) {
          arrayToReturn[counter][j] = arrayToSort[thePosition][j];
     }
     ArrayDeleteAt(arrayToSort, thePosition);
     counter = counter + 1;
}

O código acima foi extraído da função ArraySort2D() de Robert West, pode ser achada em:http://www.cflib.org/udf.cfm?ID=390

by Jeremy Petersen

Permanent link to this article: https://ensina.me/coldfusion/como-indexar-sort-uma-array-de-duas-dimensoes/

Leave a Reply