關于這個話題,到目前為止,我在這里發現了兩個與我的問題相關的問題,但并不完全。我已經找到了如何初始化大陣,在這里。另外,我發現如何宣告多維陣列,在這里。我還沒有找到涵蓋如何宣告和初始化多維陣列的解決方案。就我而言,我需要一個陣列 [10][10],其中所有元素都初始化為零。目前我這樣做如下:
$array = @(
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
)
當然,這是完全不可擴展的。從第一個問題,我發現它$arr = @(0) * 10000適用于常規陣列,所以我嘗試使用$array = @(@(0) * 10) * 10,雖然它運行得很好,但嘗試訪問該陣列的任何元素都會給我一個“無法修改,因為元素為空”錯誤。
澄清一下,這段代碼:
$array = @(
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
)
Write-Host "$($null -eq $array[1][5])"
回傳 False,這里代碼如下:
$array = @(@(0) * 10) * 10
Write-Host "$($null -eq $array[1][5])"
回傳真。
用 N 維宣告和初始化陣列的明確、正確、可擴展的方法是什么?
uj5u.com熱心網友回復:
用 N 維宣告和初始化陣列的明確、正確、可擴展的方法是什么?
$2DArray = [int[,]]::new(10,10)
這將創建一個 10x10 的 2D 陣列,您可以像這樣索引:
$null -ne $2DArray[1,5]
對于交錯陣列(陣列陣列),請使用一元陣列運算子,:
$jaggedArray = ,((0) * 10) * 10
這將創建一個 10 項陣列,其中包含 10 個 10 項陣列0,您可以像這樣索引:
$null -ne $jaggedArray[1][5]
正如評論中所提到的,由于 PowerShell 傾向于展平任何陣列,因此設計用于收集特定資訊的自定義資料型別可能會更好:
using namespace System.Collections.Generic
class SensorSink {
[List[int[]]]$Measurements = [List[int[]]]::new(10)
AcceptTelemetry([int[]]$telemetry){
if($telemetry.Count -ne 10){
throw [ArgumentException]::new('telemetry', "Expected exactly 10 data points, received $($telemetry.Count)")
}
$this.Measurements.Add($telemetry)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/323334.html
