【问题标题】:Limit foreac-object限制 foreach-object
【发布时间】:2020-05-20 08:04:09
【问题描述】:

我正在遍历一个数组,但我只想要满足我条件的前 10 个结果。但我不知道从哪里开始。我想我需要一个像for ($i=0;$i -le 10;$i++) 这样的for循环并在IF 语句为真时执行$i--。我是个菜鸟:D

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

【问题讨论】:

    标签: powershell for-loop foreach-object


    【解决方案1】:

    我想出了一种方法。还有其他/更好的方法吗?

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

    【讨论】:

    • 请注意-contains 在字符串上不起作用(如您所料)。你可能想要$_.City -like "*Oklahoma*"
    【解决方案2】:

    通常的方法是为结果保留一个计数器。当找到所需数量的结果时,break 语句将终止循环。像这样,

    $hits = 0
    $maxresults = 10
    $result | ForEach-Object {
      if ($_ -match "whatever" ){
       ++$hits
       do-stuff
      } else {
        do-something-else
      }
      if($hits -ge $maxresults) { break }
    }
    

    【讨论】:

      【解决方案3】:

      如果您正在寻找单线,那么这可能会有所帮助:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-20
        • 2015-09-22
        • 2021-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多