我有一个包含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
此致 泰德
答案 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"
),...每个密钥与三个项目的数组相关。