2016-04-21 57 views
2

我想在二維數組中的數組的所有值中刪除前導0。修剪裏面的數值(一個數組(內部的(twoDimentionalArray))

有沒有圖書館可以爲我做這個?我試着用foreach循環,但它只修剪當前的臨時變量。

下面是代碼:

[String[]]$arr1 = @('str1','str2','str3') 
[String[]]$arr2 = @('str4','str5','str6') 
[String[]]$arr3 = @('0str7') 

[System.Object[]]$twoDimensionalArray = @() 
[System.Object[]]$twoDimensionalArray += ,($arr1) 
[System.Object[]]$twoDimensionalArray += ,($arr2) 
[System.Object[]]$twoDimensionalArray += ,($arr3) 

Write-Host "Removing leading zeros from array in twoDimentionalArray..." 
ForEach ($strValue in $twoDimensionalArray[2]) 
{ 
    $strValue = $strValue.TrimStart('0') 
} 
Write-Host "Leading zero's are removed." 
Write-Host "" 

Write-Host '$strValue =' $strValue 
Write-Host '$twoDimensionalArray[2] =' $twoDimensionalArray[2] 
Write-Host "" 

輸出(0str7)

Removing leading zeros from array in twoDimentionalArray... 
Leading zero's are removed. 

$strValue = str7 
$twoDimensionalArray[2] = 0str7 

所需的輸出(STR7)

Removing leading zeros from array in twoDimentionalArray... 
Leading zero's are removed. 

$strValue = str7 
$twoDimensionalArray[2] = str7 

任何想法?

+0

看到這個答案,爲什麼你在做什麼不是一個二維數組http://stackoverflow.com/a/9397385/3829407 – Matt

回答

1

以下是具有所需輸出的修改後的代碼片段。關鍵是要修改的對象本身:

[String[]]$arr1 = @('str1','str2','str3') 
    [String[]]$arr2 = @('str4','str5','str6') 
    [String[]]$arr3 = @('0str7') 

    [System.Object[]]$twoDimensionalArray = @() 
    [System.Object[]]$twoDimensionalArray += ,($arr1) 
    [System.Object[]]$twoDimensionalArray += ,($arr2) 
    [System.Object[]]$twoDimensionalArray += ,($arr3) 

    Write-Host "Removing leading zeros from array in twoDimentionalArray..." 
    [int] $arrayCounter = 0 
    ForEach ($strValue in $twoDimensionalArray[2]) 
    { 
     $twoDimensionalArray[2][$arrayCounter] = $strValue.TrimStart('0') 

     $arrayCounter++ 
    } 
    Write-Host "Leading zero's are removed." 
    Write-Host "" 

    Write-Host '$strValue =' $strValue 
    Write-Host '$twoDimensionalArray[2] =' $twoDimensionalArray[2] 
    Write-Host "" 

我測試了這一點,它爲你期望輸出STR7。

+0

我明白了,謝謝:) –

0

編輯所有的交錯數組

這可能被認爲是作弊,我不知道你是否實際使用情況將在本恪守但我想通過使用數組運算符,使其更容易一點的在這鋸齒陣列。

$twoDimensionalArray = $twoDimensionalArray | Foreach-object{ 
    ,($_ -replace "^0+") 
} 

這應該保存回原始數組$twoDimensionalArray。使用-replace保存我們運行一個單獨的循環進入另一個數組。

這將做什麼是使用正則表達式來替換數組元素中的所有前導零。由於數組將被展開,我們仍然需要一元運算符來確保將數據作爲數組發送到管道中。

取決於你有你輸入什麼控制這可以被簡化爲

$arr1 = @('str1','str2','str3') 
$arr2 = @('str4','str5','str6') 
$arr3 = @('0str7') 

[string[]]$twoDimensionalArray = $arr1, $arr2, $arr3 | ForEach-Object{ 
    ,($_ -replace "^0+") 
} 

編輯只有一個交錯數組

很簡單變化的元素使用上述邏輯運行來獲得。

$elementToChange = 2 
$twoDimensionalArray[$elementToChange] = [String[]]@($twoDimensionalArray[$elementToChange] -replace "^0+") 
+0

即使你不這樣做明確提及 - 替換也解析循環中的所有元素,它們本質上具有相同的性能。 在我看來,它取決於是否使用-replace和循環的要求。如果你想要更多的控制,並想要執行更多的操作,那麼循環更有意義。 –

+0

@AmanSharma我以爲我是明確的_我試圖通過在這個鋸齒狀數組_上使用__array運算符___來簡化它。如果你想執行更多的操作,你可以鏈接更多的「替換」或使用更強大的正則表達式。我明白你的觀點。 – Matt

+0

我只想從第三個數組(不是二維數組中的所有數組)中除去0,但無論如何要感謝。 –

相關問題