Powershell 如何在for循环中水平显示输出?

Powershell 如何在for循环中水平显示输出?,powershell,string-formatting,Powershell,String Formatting,我正在创建一个显示n个素数的程序(例如,如果用户输入6,程序将显示前6个素数)。我希望显示1行包含5个数字。我用谷歌搜索了一下,想找到解决办法,但没找到 我曾尝试使用if-else语句来执行此操作,但不起作用 for ( $i = 3; $i -gt 0; ++$i ) #starting from 3 { $sqrt = [math]::Sqrt($i) #Optimize memory consumption for ( $j = 2; $j -

我正在创建一个显示n个素数的程序(例如,如果用户输入6,程序将显示前6个素数)。我希望显示1行包含5个数字。我用谷歌搜索了一下,想找到解决办法,但没找到

我曾尝试使用if-else语句来执行此操作,但不起作用

for ( $i = 3; $i -gt 0; ++$i ) #starting from 3
    {
        $sqrt = [math]::Sqrt($i)    #Optimize memory consumption
        for ( $j = 2; $j -le $sqrt; ++$j )    #Checked if it is divisible by any natural number
        {
            if ( $i % $j -eq 0 )    #if is prime number
            {
                $prime = 1    #set to false
                break    #stop taking into account
            }
        }
        if ( $prime -eq 0 )    #if not prime number
        {
            Write-Host ("$i")   #display prime number

            $count++    #set count to 1
            $turn++    #set turn to 1
        }
        $prime = 0    #is prime number
        if ( $count -eq $value )    #if until nth prime number
        {
            break    #stop taking into account
        }
        if ( $turn -eq 5 )
        {
           Write-Output(" ")
           $turn = 0
        }
    }
我希望结果是:
3. 5. 7. 11 十三,

十七, 19 23 29 三十一

但是它给了我这样的输出:
3
5
7
11
十三,

17
19
23
29
三十一

欢迎提出任何建议/建议。提前谢谢。

问题已解决。 通过使用-NoNewLine命令,并在“装饰”输出上投入一些精力

取得了预期的成果

非常感谢。

一些一般性的建议:

  • 避免混合使用
    写入主机
    写入输出
    调用来构造输出-这些cmdlet的用途非常不同

    • -其显式使用很少是必要的-输出数据,用于以后的编程处理

      • 未在变量中捕获、通过管道发送到另一个命令或重定向到文件的任何命令或表达式的输出都是隐式输出,因此
        Write output$i
        可以简单地写为
        $i
    • 写入主机(通常是控制台)并以状态信息的形式向用户提供反馈,或帮助请求输入-它写入与数据(成功输出)流分离的数据流,因此您不应使用它输出数据,因为这样的输出可以(无需额外努力)既不能在变量中捕获,也不能发送到另一个命令

  • 在调用PowerShell命令(cmdlet/functions/scripts)时,避免使用伪方法语法,如
    写入输出(“”)

    • 在PowerShell中,命令的调用与shell命令类似-
      Write Output arg1 arg2
      ,而与C#方法不同-
      Write Output(arg1,arg2)
      ;请参阅。
      为防止意外使用方法语法,请使用或更高版本,但请注意其其他影响

如果希望在同一行上输出一个对象数组,只需通过一个(插入字符串),
“…”
,将其字符串化,这将创建一个空格分隔的[1]元素列表:

function get-Primes {
  param($n)
  1..$n # simulate output: simply return array 1, 2, 3, ...
}

# Get an array of numbers
$primes = get-Primes 5

# Output the array as a space-separated list, via an expandable string:
"$primes"
上述收益率:

12345


[1] 空间字符。是默认的分隔符,但
$OFS
首选项变量可用于指定不同的字符。

您也可以将它们添加到集合中,然后使用
$collection-join'
生成整洁的空格分隔字符串。。。然后写在屏幕上。[咧嘴笑]