3

私はグラフ理論について少し学んでいて、Powershellテキストの書式設定に取り残されました。ユーザー入力に基づいて2次元配列を作成し、その配列を表形式で表示するスクリプトを作成しています。最初の部分は簡単です。ユーザーに配列のサイズを尋ねてから、各要素の値をユーザーに尋ねます。2番目の部分(行と列で配列を表示する)は困難です。

Powershellは、配列の各要素を独自の行に表示します。次のスクリプトは、次の出力を生成します。

$a= ,@(1,2,3)
$a+=,@(4,5,6)
$a

1
2
3
4
5
6

次のような出力が必要です:

1 2 3
4 5 6

スクリプトブロックを使用して正しくフォーマットできます。

"$($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でこれをすっきりとした小さなテーブルとして表示したいと思います。何か案は?

4

1 に答える 1

1

これを試して:

$a | % { $_ -join ' ' }

またはそれ以上

$a | % { $_ -join "`t" }
于 2012-11-20T17:06:26.893 に答える