Powershell - цикл по объектам в партиях по 3 - PullRequest
4 голосов
/ 14 мая 2011

У меня есть объект, который содержит 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 ]

10 голосов
/ 14 мая 2011

Ваш псевдокод практически реален.Я только что изменил его синтаксис и использовал оператор диапазона (..):

# 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 голос
/ 14 мая 2011

Посмотрите, может ли это работать должным образом (я предполагаю, что ваш элемент 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}

Должен возвращать HashTable ($batches) с ключами, такими как "Batch 1", "Batch 2", ... каждый ключ связан с массивом из трех элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...