有没有一种简单的方法来打印数组的每个元素?

Is there a simple way to print each element of an array?

let x=[|15..20|]
let y=Array.map f x
printf "%O" y

嗯,我得到了类型信息。

有什么方法可以打印 "y" 的每个元素并使用“,”分隔符,而不必使用 for 循环?

System 命名空间中使用 String.Join 或 F# 'native':

let x = [| 15 .. 20 |]

printfn "%s" (System.String.Join(",", x))

x |> Seq.map string |> String.concat "," |> printfn "%s"

在这种情况下,使用 String.concat 将字符串与分隔符连接起来可能是最佳选择(因为您不想在末尾使用分隔符)。

但是,如果你只想打印所有元素,你也可以使用Array.iter:

let nums= [|15..20|]
Array.iter (fun x -> printfn "%O" x) nums    // Using function call
nums |> Array.iter (fun x -> printfn "%O" x) // Using the pipe 

在这种情况下添加分隔符比较困难,但可以使用 iteri:

nums |> Array.iteri (fun i x ->
  if i <> 0 then printf ", "
  printf "%O" x) 

如果项数组很大并且您不想生成大字符串,另一种选择是生成交错序列并跳过第一项。以下代码在假设数组至少有一个元素的情况下工作。

这种方法的一个优点是它清楚地将交织项目的行为与打印的行为分开。它还消除了在每次迭代时都必须对第一项进行检查的麻烦。

let items = [| 15 .. 20|]

let strInterleaved delimiter items = 
    items 
    |> Seq.collect (fun item -> seq { yield delimiter; yield item}) 
    |> Seq.skip(1)

items
|>  Seq.map string
|>  strInterleaved "," 
|>  Seq.iter (printf "%s")

如果数组很大,则不会打印整个数组;我认为它只打印前 100 个元素。不过,我怀疑这就是您想要的:

printfn "%A" y