2013-05-27 7 views
4

튜플 배열을 2 차원 배열로 변환하는 더 나은 방법이 있습니까?2 차원 배열로 튜플 배열 변환

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

답변

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 
+0

정말 변경할 수없는 함수에서 튜플 목록을 받고 있습니다. –

1

가장 쉬운 옵션은 array2D 기능을 사용한다는 것이 @pad에 동의합니다. 나는 일반적으로 (Seq.map 같은) 고차원 적 기능을 통해 시퀀스 표현식을 사용하는 것을 선호, 그래서 아마 작성합니다

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

이 본질적으로 @pad의 답변으로 같은 일을한다. 목록 구조 목록은 array2D으로 예상되는 데이터 구조입니다 (외부를 seq { .. }으로 작성하는 것이 더 효율적이지만 목록은 단순하게 사용했습니다).