我正在尝试删除二维数组中数组所有值中的前导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+")