4
我只是想知道是否有更好的方法將元組數組轉換爲二維數組?將元組數組轉換爲二維數組
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 { .. }
會更高效,但爲簡單起見,我使用了列表)。
我收到一個函數的列表,我不能真的改變 –