将字符串[,]转换为字符串表示形式

时间:2014-05-25 13:41:04

标签: multidimensional-array f#

假设我有这个二维数组:

let a = Array2D.create 2 2 "*"

将其转换为以下字符串的惯用方法是什么?

**\n
**\n

我的想法是我需要迭代行,然后将string.concat映射到每行中的项目上。但是,我似乎无法弄清楚如何只迭代行。

2 个答案:

答案 0 :(得分:3)

我认为你必须手动迭代行(Array2D没有任何方便的功能),
但你可以使用拼接语法获得一行。要获取索引row的行,您可以编写array.[row, *]

let a = Array2D.create 3 2 "*"
[ for row in 0 .. a.GetLength(0)-1 ->
    String.concat "" a.[row,*] ]
|> String.concat "\n"

这将创建一个行列表(每个行使用第一个String.concat转换为字符串),然后使用第二个String.concat连接行。

答案 1 :(得分:0)

或者,您可以使用StringBuilder并参与Array2D.iteri功能:

let data' = [|[|"a"; "b"; "c"|]; [|"d"; "e"; "f"|]|]
let data = Array2D.init 2 3 (fun i j -> data'.[i].[j]) 

open System.Text
let concatenateArray2D (data:string[,]) =
    let sb = new StringBuilder()
    data
    |> Array2D.iteri (fun row col value ->
        (if col=0 && row<>0 then sb.Append "\n" else sb)
            .Append value |> ignore
        )
    sb.ToString()

data |> concatenateArray2D |> printfn "%s"

打印:

abc
def