Powershell - 分批循环穿过物体3

时间:2011-05-14 05:38:41

标签: powershell

我有一个包含7个项目的对象。

$obj.gettype().name
Object[]

$obj.length
7

我想分批循环3.我不想使用模数函数,我实际上希望能够只用该批次中的3个项目创建一个新对象。伪代码:

$j=0
$k=1
for($i=0;$i<$obj.length;$i+=3){
    $j=$i+2
    $myTmpObj = $obj[$i-$j] # create tmpObj which contains items 1-3, then items 4-6, then 7 etc
    echo "Batch $k
    foreach($item in $myTmpObj){
        echo $item
    }
    $k++
 }

Batch 1
item 1
item 2
item 3

Batch 2
item 4
item 5
item 6

Batch 3
Item 7

此致 泰德

2 个答案:

答案 0 :(得分:10)

您的伪代码几乎是真实的。我刚刚更改了它的语法并使用了范围运算符(..):

# demo input (btw, also uses ..)
$obj = 1..7

$k = 1
for($i = 0; $i -lt $obj.Length; $i += 3) {

    # end index
    $j = $i + 2
    if ($j -ge $obj.Length) {
        $j = $obj.Length - 1
    }

    # create tmpObj which contains items 1-3, then items 4-6, then 7 etc
    $myTmpObj = $obj[$i..$j]

    # show batches
    "Batch $k"
    foreach($item in $myTmpObj) {
        $item
    }
    $k++
}

输出看起来完全符合要求。

答案 1 :(得分:0)

看看这个是否可以按要求工作(我假设你的项目n $obj的一个元素)

$obj | % {$i=0;$j=0;$batches=@{}}

if($i!=3 and $batches["Batch $j"]) { $batches["Batch $j"]+=$_; $i+=1 }
else {$i=1;$j+=1;$batches["Batch $j"]=@($_)}

} {$batches}

应该使用$batches"Batch 1"等密钥返回HashTable("Batch 2"),...每个密钥与三个项目的数组相关。