我正在学习一些关于图论的知识,并且进入了Powershell文本格式。我正在编写一个脚本,根据用户输入创建一个二维数组,并以表格格式显示数组。第一部分很简单:询问用户数组的大小,然后询问用户每个元素的值。第二部分 - 以行和列显示数组 - 很难。
Powershell在其自己的行中显示数组的每个元素。以下脚本生成以下输出:
$a= ,@(1,2,3)
$a+=,@(4,5,6)
$a
1
2
3
4
5
6
我需要输出:
1 2 3
4 5 6
我可以使用scriptblocks正确格式化它:
"$($a[0][0]) $($a[0][1]) $($a[0][2])"
"$($a[1][0]) $($a[1][1]) $($a[1][2])"
1 2 3
4 5 6
但这只有在我知道数组的大小时才有效。每次脚本运行时,用户都会设置大小。它可能是5x5,也可能是100x100。 我可以使用foreach循环调整行数:
foreach ($i in $a){
"$($i[0]) $($i[1]) $($i[2])"
}
但是,这不会调整列数。我不能只嵌套另一个foreach循环:
foreach ($i in $a){
foreach($j in $i){
$j
}
}
只是再次在自己的行上打印每个元素。嵌套的foreach循环是我用来迭代数组中每个元素的方法,但在这种情况下它们对我没有帮助。有任何想法吗?
目前的脚本如下:
clear
$nodes = read-host "Enter the number of nodes."
#Create an array with rows and columns equal to nodes
$array = ,@(0..$nodes)
for ($i = 1; $i -lt $nodes; $i++){
$array += ,@(0..$nodes)
}
#Ensure all elements are set to 0
for($i = 0;$i -lt $array.count;$i++){
for($j = 0;$j -lt $($array[$i]).count;$j++){
$array[$i][$j]=0
}
}
#Ask for the number of edges
$edge = read-host "Enter the number of edges"
#Ask for the vertices of each edge
for($i = 0;$i -lt $edge;$i++){
$x = read-host "Enter the first vertex of an edge"
$y = read-host "Enter the second vertex of an edge"
$array[$x][$y] = 1
$array[$y][$x] = 1
}
#All this code works.
#After it completes, I have a nice table in which the columns and rows
#correspond to vertices, and there's a 1 where each pair of vertices has an edge.
此代码生成邻接矩阵。然后我可以使用矩阵来学习关于图论算法的所有知识。与此同时,我想让Powershell将它展示为一张整洁的小桌子。有任何想法吗?
答案 0 :(得分:1)
试试这个:
$a | % { $_ -join ' ' }
或更好
$a | % { $_ -join "`t" }