Powershell 内部修剪值(内部一个数组(二维数组))
我试图删除二维数组中数组所有值的前导0 有图书馆可以帮我做这件事吗?我尝试使用foreach循环,但它只修剪当前的temp变量 代码如下:Powershell 内部修剪值(内部一个数组(二维数组)),powershell,powershell-3.0,Powershell,Powershell 3.0,我试图删除二维数组中数组所有值的前导0 有图书馆可以帮我做这件事吗?我尝试使用foreach循环,但它只修剪当前的temp变量 代码如下: [String[]]$arr1 = @('str1','str2','str3') [String[]]$arr2 = @('str4','str5','str6') [String[]]$arr3 = @('0str7') [System.Object[]]$twoDimensionalArray = @() [System.Object[]]$twoD
[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)
期望输出(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
。使用-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+")
即使没有明确提到,-replace也会解析循环中的所有元素,这在本质上具有相同的性能。在我看来,这取决于是否使用-替换与循环的需求。若你们想要更多的控制,想要执行更多的操作,那个么循环就更有意义了。@AmanSharma我认为我是显式的uu我试图通过在这个锯齿状的数组上使用数组操作符使它变得更容易一些。如果要执行更多操作,可以链接更多的
-替换或使用更健壮的正则表达式。我明白你的意思。我只想从第三个数组中去掉0(不是二维数组中的所有数组),但无论如何还是要谢谢你。@FiddleFreak我的错。我已经更新了我的答案,现在它实际上回答了您的问题。您好@Matt,逗号在,($-替换“^0+”)
中的用途是什么?请查看此答案,了解您所做的不是二维数组的原因
$twoDimensionalArray = $twoDimensionalArray | Foreach-object{
,($_ -replace "^0+")
}
$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+")