假设我有这个二维数组:
let a = Array2D.create 2 2 "*"
将其转换为以下字符串的惯用方法是什么?
**\n
**\n
我的想法是我需要迭代行,然后将string.concat
映射到每行中的项目上。但是,我似乎无法弄清楚如何只迭代行。
答案 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