HashSet` .ToArray()`使用F#

时间:2011-11-02 07:44:42

标签: f# ienumerable hashset

为了能够为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定义。)

所以应该有办法。

3 个答案:

答案 0 :(得分: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#

答案 1 :(得分: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#函数更为惯用。

答案 2 :(得分:0)

我相信它是一个扩展方法,所以你需要打开包含Enumerable(Linq?)的命名空间来获取它,就像在C#中一样。