假设我有这样一个二维数组:
let a = Array2D.create 2 2 "*"
将其转换为以下字符串的惯用方法是什么?
**n
**n
我的想法是,我需要遍历行,然后将string.concat
映射到每行中的项上。然而,我似乎不知道如何迭代只是行。
我认为你必须手动遍历行(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
将行连接起来。
或者,您可以使用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