在 coldfusion 中打印 1 到 9 的矩阵

print a matrix by 1 to 9 in coldfusion

如何在 coldfusion 中打印一个矩阵,如 3*3 矩阵,我是 coldfusion 新手,num = [1,2,3,4,5,6,7,8,9];这是我的数组,如何通过编程方式按 3 行和 3 列打印此数组。矩阵输出是 `

1    4    7

2    5    8

3    6    9

` 如何在 coldfusion

中创建这样的矩阵

我们仍然不知道您是如何存储矩阵数据的。因此,我正在创建一个存储矩阵数据的方法的简单示例以及如何在 HTML 中输出它。这只是我如何做的一个例子,但可能还有其他方法。

存储矩阵数据:首先,您需要将矩阵的所有数据存储在这样一种方式中,以便您可以轻松地迭代(循环)所有值,即能够逐行逐列地直接寻址每个值。正如@James A Mohler 已经评论的那样,用于此类任务的常见做法是 Array of Arrays。这些只是存储在数组中的数组!

作为cfscript的代码示例以获得更好的解释:

<cfscript>

    // create empty matrix array to store a matrix
    myMatrix2DArray=[];

    // setting the values row by row with
    // myMatrix2DArray[rowIndex]=[ valueOfColumn1, valueOfColumn2, valueOfColumn3];
    myMatrix2DArray[1]=[1,4,7];
    myMatrix2DArray[2]=[2,5,8];
    myMatrix2DArray[3]=[3,6,9];

    writedump( var=myMatrix2DArray, label="example1" );

</cfscript>

相同数据的隐式存储方式:

<cfscript>

    //setting multidimensional array (2D) fully implicitly (example 2)
    myMatrix2DArray=[
        [1,4,7],
        [2,5,8],
        [3,6,9]
    ];

    writedump( var=myMatrix2DArray, label="example2" );

</cfscript>

正如您从上面的示例中看到的那样,矩阵将每一行存储在一个数组(维度 1)和一个用于列值的附加数组(维度 2)中:因此 Array of Arrays - 在我们的示例中,它是一个二维数组。

因为您更新了您的问题,以一维数组的形式向我们提供数据,所以我会先将其转换为这样的二维数组。

经典方式使用for循环:

<cfscript>    
    //using classic for loop:
    initialArray=[1,4,7,2,5,8,3,6,9];
    row=[];
    myMatrix2DArray=[];
    arrayIndex=1;
    for( element in initialArray ){
        if( arrayIndex mod 3 == 0 ){
            //append last element;
            row.append( element );
            myMatrix2DArray.append( row );
            //reset row and return acc with 1;
            row=[];
            arrayIndex=1;
        }else{
            row.append( element );
            arrayIndex++;
        }
    }
</cfscript>    

使用arrayReduce()函数的新方式(我这里使用的是成员函数):

<cfscript>
   // using arrayReduce() member function
   initialArray=[1,4,7,2,5,8,3,6,9];
   row=[];
   myMatrix2DArray=[];
   initialArray.reduce( 
           ( acc, element ) => {
                   if( acc mod 3 == 0 ){
                       //append last element;
                       row.append( element );
                       myMatrix2DArray.append( row );
                       //reset row and return acc with 1;
                       row=[];
                       return 1;
                   }else{
                       row.append( element );
                       return acc+1;
                   }
           }, 1 );
   writedump( var=myMatrix2DArray, label="example3" );
</cfscript>

将矩阵数据输出为 HTML:将数据存储为二维数组,我们可以轻松地遍历所有值以将数据输出为表格数据在 HTML table 中如下:

<cfscript>

    // output style for better view
    writeOutput("<style>table,th,td{border:1px dotted gray;}</style>");


    // output table body and header
    writeOutput("<table><tbody>");
    writeOutput("<tr><th>Column1</th><th>Column2</th><th>Column3</th></tr>");

    for( row in myMatrix2DArray ){

        //open new table row
        writeOutput("<tr>");

        for( column in row ){

            writeOutput("<td>#column#</td>");

        }

        //close table row
        writeOutput("</tr>");
    }

    writeOutput("</tbody></table>");

</cfscript>

这种方法的优点 是您可以轻松访问一个特定的 通过简单地引用行索引和列索引来获取矩阵数组的值: myMatrix2DArray[row][colum]如下:

<cfscript>

    writeOutput("<div>Value for Row=2 and Column=3: <strong>#myMatrix2DArray[2][3]#</strong></div>");
    writeOutput("<div>Value for Row=3 and Column=1: <strong>#myMatrix2DArray[3][1]#</strong></div>");

</cfscript>