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

时间:2015-05-22 10:19:08

标签: arrays printing f#

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

好吧,我收到了一个类型信息。

有没有办法用“,”的分隔符打印“y”的每个元素,而不必使用for循环?

4 个答案:

答案 0 :(得分:7)

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

let x = [| 15 .. 20 |]

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

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

答案 1 :(得分:2)

在这种情况下,使用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) 

答案 2 :(得分:1)

如果整个阵列很大,则不会打印整个阵列;我认为它只打印前100个元素。不过,我怀疑这是你之后的事情:

printfn "%A" y

答案 3 :(得分:0)

如果项目数组很大而您不想生成大字符串,则另一个选项是生成交错序列并跳过第一项。假设数组至少有一个元素,以下代码可以正常工作。

这种方法的一个优点是它可以清晰地分离交错物品和印刷物品的行为。它还消除了在每次迭代时都必须检查第一项的情况。

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")