2011-11-02 2 views
1

.ToArray()을 HashSet에 호출하려면 무엇을해야합니까? 나는 다음과 같은 시도했지만 작동하지 않았다 F #을 사용하는 HashSet`.ToArray()`#

let a = System.Collections.Generic.HashSet() 
a.Add 5 |> ignore 
a.ToArray() // Not possible 
let b = a :> System.Collections.IEnumerable 
b.ToArray() // Not possible 

Here

이이이 적혀있다 :

ToArray : 한을 IEnumerable에서 배열을 작성합니다. (Enumerable에 의해 정의 됨)

그래서 방법이 있어야합니다.

답변

6

IEnumerable.ToArray()는 System.Linq 아래의 확장 메서드로 정의됩니다. 또는 Seq.toArray 또는 Array.ofSeq을 사용하십시오.

open System.Collections.Generic 
open System.Linq 

let hs = HashSet() 
hs.Add 4 
hs.Add 2 

let arr = hs.ToArray()  // needs System.Linq 
let arr2 = hs |> Seq.toArray // provided by F# 
+0

설명해 주셔서 감사합니다. –

0

저는 이것이 확장 메서드라고 생각합니다. 따라서 C# 에서처럼 Enumerable (Linq?)이 포함 된 네임 스페이스를 열어야합니다. 당신이 열 경우 (너무 작동 C#을 확장 방법 ToArray를 사용

let hs = System.Collections.Generic.HashSet() 
hs.Add(1) 

let ar = hs |> Seq.toArray 

: 당신이 (모든 네임 스페이스를 열지 않고) Seq.toArray을 사용할 수 있도록

3

HashSet 유형 (F #으로 seq<'T>라고합니다) 표준 일반 IEnumerable<'T> 유형을 구현 System.Linq), 표준 F # 함수를 사용하는 것이 더 관용적이라고 생각합니다.