可变的基础集合Map <int64,customobject =“”> </int64,>

时间:2013-11-11 22:38:37

标签: f#

我正在尝试编写一个包含Map<int64, customType>基础集合的F#类型,以便我可以向其中添加项目:

type public CandleContainer (seedCandles:System.Collections.Generic.IEnumerable<Candle>) = 
let candles : Map<int64, Candle> =
    seedCandles
    |> Seq.map (fun x -> x.Start.Ticks, x)
    |> Map.ofSeq

let candleInterval = TimeSpan.FromMinutes(1.0)

member public x.AddCandle (candle:Candle) = 
    candles = candles.Add(candle.Start.Ticks, candle)

member public x.GetList () : List<Candle> = 
    candles
    |> Map.toSeq
    |> Seq.map (fun (key, value) -> value)
    |> Seq.toList

我遇到的问题是在AddCandle方法中。据我所知,Map.Add返回一个添加了值的新地图,编译器并没抱怨我正试图覆盖蜡烛的值。但是,每当我尝试使用此方法添加新的Candle时,x.GetList将返回一个空列表。有没有办法用Map.Add的结果覆盖蜡烛的旧值?或者我只是将蜡烛变成可变值并覆盖它?

1 个答案:

答案 0 :(得分:2)

您要找的是mutable关键字和<-运营商。

let candles ...更改为

let mutable candles : Map<int64, Candle>

candles = ...

candles <- candles.Add(candle.Start.Ticks, candle)

。另请注意,您之前使用=您认为正在进行替换的情况实际上是执行了相等检查,从而使该方法的返回类型为bool