我只是想知道是否有更好的方法将元组数组转换为二维数组?
let list = [|("a", "1"); ("b", "2"); ("c", "3")|];;
let arr = Array2D.init (Array.length list) 2 (fun i j -> if j <> 0 then (fst list.[i]) else (snd list.[i]));;
我只是想知道是否有更好的方法将元组数组转换为二维数组?
let list = [|("a", "1"); ("b", "2"); ("c", "3")|];;
let arr = Array2D.init (Array.length list) 2 (fun i j -> if j <> 0 then (fst list.[i]) else (snd list.[i]));;
更简洁的方法是使用array2D:
[|("a", "1"); ("b", "2"); ("c", "3")|]
|> Seq.map (fun (x, y) -> [|x; y|])
|> array2D
但是有什么理由不从一开始就使用数组数组来轻松初始化,例如
let arr =
[|[|"a"; "1"|];
[|"b"; "2"|];
[|"c"; "3"|]|]
|> array2D
我同意@pad,最简单的选择是使用array2D
函数。我通常更喜欢使用序列表达式而不是高阶函数(如Seq.map
),所以我可能会写:
let arr =
array2D [ for char, num in list ->
[ char; num ] ]
这与@pad 的答案基本相同。它创建了一个列表列表,这是一个预期的数据结构array2D
(将外部编写为 会更有效seq { .. }
,但为了简单起见,我使用了列表)。