2012-06-13 5 views
2

Я самонаводящийся программист новичка, и я чувствую, что это действительно основной вопрос, какой я мог бы ответить, если бы я действительно изучал информатику : P В моем поиске интертронов и StackOverflow я не смог найти ответ, который я ищу. Поэтому я надеюсь, что кто-то может побаловать меня.Петля через коллекцию объектов n за раз

У меня есть коллекция объектов. Я хочу работать с ними по пять за раз, а затем переходить к следующим пяти. Контекст перезагружает кучу виртуальных машин; Меня попросят пошатнуть их, чтобы хосты не захлопали со всеми перезагрузками виртуальных машин сразу.

Я чувствую, что правильный путь - это петля for i в некотором качестве, а не foreach. Я также чувствую, что это может быть комбинация do-until и for i, но я не могу отфильтровать ответ из своего мозга.

Возможно, я мог бы сделать это, удалив объекты из коллекции, но это похоже на «неправильный» способ сделать это, даже если это сработает.

Я делаю это с Powershell и PowerCLI, но я чувствую, что логика, которую я пытаюсь понять, более фундаментальна, чем быть зависимой от любого языка, поэтому, даже если вы не знакомы с Powershell, м интересуется вашим ответом.

Edit: На основании ответа Давида ниже, следующий код, кажется, что я ищу:

$someLetters = @("a","b","c","d","e","f","g","h","i","j","k") 

for($i=0; $i -lt $someLetters.length; $i+=5) 
{ 
    Write-Host ("the letter is " + $someLetters[$i] + " and i is " + $i) 
    Write-Host ("the letter is " + $someLetters[$i+1] + " and i is " + $i) 
    Write-Host ("the letter is " + $someLetters[$i+2] + " and i is " + $i) 
    Write-Host ("the letter is " + $someLetters[$i+3] + " and i is " + $i) 
    Write-Host ("the letter is " + $someLetters[$i+4] + " and i is " + $i) 
    write-host "finished block of five" 
} 

дает выход:

the letter is a and i is 0 
the letter is b and i is 0 
the letter is c and i is 0 
the letter is d and i is 0 
the letter is e and i is 0 
finished block of five 
the letter is f and i is 5 
the letter is g and i is 5 
the letter is h and i is 5 
the letter is i and i is 5 
the letter is j and i is 5 
finished block of five 
the letter is k and i is 10 
the letter is and i is 10 
the letter is and i is 10 
the letter is and i is 10 
the letter is and i is 10 
finished block of five 

Спасибо вам Давида!

+0

Интересный вопрос. Мне будет интересно с этим. –

+0

Спасибо :) Я все еще экспериментирую, и я чувствую, что ответ прямо на кончике моего мозга. Настолько расстраивает, но одновременно то, что я люблю в программировании. – Formica

+0

В несвязанной заметке обратите внимание, что двойные кавычки заменяют переменные на их значения. Поэтому '' i = $ i "будет писать' i = 0', а 'i = $ i' будет буквально писать' i = $ i'. –

ответ

2

Вы не сказали, в каком контейнере находятся ваши объекты. Предполагаю, что это массив. Итак, вы можете сделать что-то вроде этого:

for($i=0; $i -lt $objectArray.length; $i+=5) 
{ 
    #do something with $objectArray[$i] 
} 
+0

Вероятно, лучше, чем я пытался. Я разбивал массив на массив массивов из 5 объектов. У меня были проблемы с этим. –

+0

Да, это массив. Я думаю, что это правильный путь. Я хотел понять вашу логику, поэтому я сделал этот тест: '$ someLetters = @ (" a "," b "," c "," d "," e "," f "," g "," h "," i "," j "," k ")' 'for ($ i = 0; $ i -lt $ someLetters.length; $ i + = 5)' '{' '\t Write- Хост ("письмо является" + $ someLetters [$ я] + "и я есть" + $ я) '' } ' Что дает выход: ' буква является и я это 0' ' буква f и i равна 5' 'буква k и i равна 10' Но если я добавлю еще четыре строки, которые выполняют ту же операцию с' $ i + 1', '$ i + 2' и т. д. , Я получаю все письма! Спасибо :-) – Formica

+0

Извините за плохое форматирование, я раньше не пытался делать код в комментарии. – Formica

Смежные вопросы