Ограничить foreac-объект

Я просматриваю массив, но мне нужны только первые 10 результатов, которые соответствуют моим условиям. Но я понятия не имею, с чего начать. Я думаю, мне нужен цикл, напримерfor ($i=0;$i -le 10;$i++)и делаем $i--, когда утверждение IF истинно. Я новичок:D

$result | ForEach-Object {
    if (($_.City -contains 'Oklahoma') -or ($_.City -like 'Chicago')){
    }else {
    $dosomething
   }
}

3 ответа

Решение

Я придумал один способ сделать это. Есть ли другой / лучший способ сделать это?

$i=0;
$result | ForEach-Object {
     if (($_.City -contains 'Oklahoma') -or ($_.City -like 'Chicago') -or (($i -ge 10)){}
     else {
           $dosomething
           $i++;
     }
}

Если вы ищете однострочник, это может помочь:

$top10 = $result | Where-Object {($_.City -contains 'Oklahoma') -or ($_.City -like 'Chicago')} | Select-Object -First 10 -Skip 0

Обычный способ - вести счетчик результатов. Когда желаемое количество результатов найдено,breakоператор завершит цикл. Вот так,

$hits = 0
$maxresults = 10
$result | ForEach-Object {
  if ($_ -match "whatever" ){
   ++$hits
   do-stuff
  } else {
    do-something-else
  }
  if($hits -ge $maxresults) { break }
}
Другие вопросы по тегам