将数组送入printfn

Dav*_*ers 5 printf f#

我打印的是Tic-Tac-Toe板.我有一个字符串,用于电路板的每个单元格和电路板的格式字符串.我现在正在做:

let cells = [| 'X'; 'O'; 'X'; 'O'; 'X'; 'O'; ' '; ' '; ' ' |]
printfn ".===.===.===.\n\
         | %c | %c | %c |\n\
         .===.===.===.\n\
         | %c | %c | %c |\n\
         .===.===.===.\n\
         | %c | %c | %c |\n\
         .===.===.===.\n" cells.[0] cells.[1] cells.[2] cells.[3] cells.[4] cells.[5] cells.[6] cells.[7] cells.[8]
Run Code Online (Sandbox Code Playgroud)

有没有办法将cells数组提供给printfn而不显式枚举数组中的所有9个项目?我可以用某种方式使用Array.fold或kprintf吗?

kvb*_*kvb 6

Funk的答案非常好,但我认为通过引入一个join函数来连接元素(单个单元格或行)与它们之间的分隔符并围绕它们,可以使它变得更简单.

let join s arr = sprintf "%s%s%s" s (String.concat s arr) s
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

cells
|> Seq.chunkBySize 3
|> Seq.map (Seq.map (sprintf " %c ") >> join "|")
|> Seq.map (fun s -> s + "\n")
|> join ".===.===.===.\n"
|> printfn "%s"
Run Code Online (Sandbox Code Playgroud)