我正在尝试构建一个将字符串数组分割成的函数 a)带有[x]字符串数组的哈希表 - 或 - b)x字符串数组
我现在拥有以下内容:
Function Split-Array {
Param (
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[array]$arrToSplit,
# Param2 help description
[int]$SplitInTo = 8
)
$Round = 0
$hashSplitted = @{}
For ($i = 0 ; $i -le ($SplitInTo -1) ; $i++ ) {
New-Variable -Name "arrPartial$i" -Value @()
}
While (($Round * $SplitInTo) -le $arrToSplit.Count) {
For ($i = 0 ; $i -le ($SplitInTo - 1) ; $i++) {
$arrDynamicVariable = Get-Variable -name "arrPartial$i" -ValueOnly
$arrDynamicVariable += $arrToSplit[($Round * $SplitInTo) + $i]
Set-Variable -Name "arrPartial$i" -Value $arrDynamicVariable
}
$Round++
}
For ($i = 0 ; $i -le ($SplitInTo -1) ; $i++) {
$hashSplitted[$i] = Get-Variable -Name "arrPartial$i" -ValueOnly
}
$hashSplitted
}
似乎出错的地方是“Get-Variable”部分。 Powershell给出了一个错误:
Get-Variable:找不到名为'arrPartial8'的变量。在 line:1 char:1 + Get-Variable -name“arrPartial $ i”-ValueOnly + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:ObjectNotFound:(arrPartial8:String)[Get-Variable],I temNotFoundException + FullyQualifiedErrorId:VariableNotFound,Microsoft.PowerShell.Commands.GetVari ableCommand
奇怪的是,似乎创建了arrPartial变量,但它与例如由...声明的变量略有不同。 “$ arra = @()”,如下所示:
PS Variable:\> dir
Name Value
---- -----
$ )
? True
^ $arra
args {}
arra {}
arrPartial0 {}
arrPartial1 {}
arrPartial2 {}
arrPartial3 {}
arrPartial4 {}
arrPartial5 {}
arrPartial6 {}
arrPartial7 {}
请注意arrPartialx数组左侧缩进{}的事实。这是一个错误还是我在这里做错了什么?任何有关不同方法的想法都是受欢迎的。
答案 0 :(得分:1)
不确定我是否正确理解您正在尝试实现的目标。你想"折叠"一维数组
[ a, b, c, d, e, f, g, h, i, j ]
进入这样的哈希表(为简单起见假设为$SplitInTo = 3
)?
{
arrPartial0 => [ a, d, g, j ]
arrPartial1 => [ b, e, h ]
arrPartial2 => [ c, f, i ]
}
如果是这样,那么您的方式过于复杂。这样的事情就足够了:
function Invoke-FoldArray {
Param(
[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)]
[array]$arrToSplit,
[int]$SplitInTo = 8
)
$ht = [ordered]@{}
0..($SplitInTo-1) | % {
$ht["arrPartial$_"] = @()
}
$i = 0
$arrToSplit | % {
$ht["arrPartial$i"] += $_
$i++
$i %= $SplitInTo
}
return $ht
}