2011-11-02 29 views
1

我需要做什麼才能爲HashSet調用.ToArray()?我曾嘗試以下,但它沒有工作:HashSet`.ToArray()`使用F#

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

我相信這是一個擴展方法,因此您需要打開包含Enumerable(Linq?)的命名空間才能獲取它,就像在C#中一樣。

3

HashSet類型實現了標準的通用IEnumerable<'T>類型(F#被稱爲seq<'T>),所以你可以使用Seq.toArray(無需打開任何命名空間):

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

let ar = hs |> Seq.toArray 

使用C#擴展方法ToArray也可以工作(如果你打開System.Linq),但我相信使用標準的F#函數更具慣用性。