将元组数组转换为2d数组

时间:2013-05-27 13:20:52

标签: f#

我只是想知道是否有更好的方法将元组数组转换为二维数组?

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]));;

2 个答案:

答案 0 :(得分:6)

更简洁的方法是使用array2D

[|("a", "1"); ("b", "2"); ("c", "3")|]
|> Seq.map (fun (x, y) -> [|x; y|])
|> array2D

但是,为了便于初始化,你有没有理由不使用数组数组,例如。

let arr =
  [|[|"a"; "1"|]; 
    [|"b"; "2"|]; 
    [|"c"; "3"|]|]
  |> array2D

答案 1 :(得分:1)

我同意@pad最简单的选择是使用array2D功能。我通常更喜欢在高阶函数(如Seq.map)上使用序列表达式,所以我可能会写:

let arr =
  array2D [ for char, num in list ->
              [ char; num ] ] 

这与@pad的答案基本相同。它创建了一个列表列表,这是array2D所期望的数据结构(将外部写为seq { .. }会更有效,但我使用列表来简化)。