内部修剪值(内部一个数组(二维数组))



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

有图书馆可以为我做这件事吗?我尝试了foreach循环,但它只修剪了当前的temp变量。

这是代码:

[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

有什么想法吗?

这是经过修改的具有所需输出的代码片段。诀窍是修改对象本身:

    [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。

编辑所有锯齿状数组

这可能被认为是作弊,我不知道你的实际用例是否会遵守这一点,但我试图通过在这个锯齿状数组上使用数组运算符来简化它。

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

这应该保存回原始数组$twoDimensionalArray。使用-replace可以节省我们运行一个单独的循环进入另一个数组的时间。

这将使用regex替换数组元素中所有前导的零。由于数组随后将被展开,我们仍然需要一元运算符来确保数据作为数组通过管道发送。

根据你对输入的控制,这可以简化为

$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+")

最新更新