[英]Dynamically splitting an array in powershell
我正在嘗試構建一個將字符串數組拆分為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
}
似乎出錯的是“獲取變量”部分。 Powershell給出了一個錯誤:
Get-Variable:找不到名稱為“ arrPartial8”的變量。 在第1行:char:1 + Get-Variable -name“ arrPartial $ i” -ValueOnly + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ +
奇怪的是,arrPartial變量似乎已創建,但與例如“ $ arra = @()”聲明的變量有些不同,如下所示:
PS Variable:\> dir
Name Value
---- -----
$ )
? True
^ $arra
args {}
arra {}
arrPartial0 {}
arrPartial1 {}
arrPartial2 {}
arrPartial3 {}
arrPartial4 {}
arrPartial5 {}
arrPartial6 {}
arrPartial7 {}
注意arrPartialx數組的{}縮進到左側。 這是一個錯誤還是我在這里做錯了什么? 歡迎提供任何不同方法的想法。
不知道我是否正確理解您要達到的目標。 您是否要“折疊”一維數組
[ 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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.