内部修剪值(内部一个数组(twoDimentionalArray))

时间:2016-04-21 01:10:35

标签: powershell powershell-v3.0

我正在尝试删除二维数组中数组的所有值中的前导0。

是否有可以为我这样做的图书馆?我用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

有什么想法吗?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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+")