(误)了解Seq.cache

时间:2015-05-06 23:47:06

标签: f# sequence

我有以下代码(在一个更大的函数中,但这不重要):

let ordersForTask = Dictionary<_, _>()

let getOrdersForTask task =
    match ordersForTask.TryGetValue task with
    | true, orders -> orders
    | false, _ ->
        let orders =
            scenario.Orders
            |> Seq.filter (fun (order : Order) -> order.Tasks.Contains(task))
            |> Seq.cache

        ordersForTask.Add(task, orders)
        orders

根据我的理解,无论order.Tasks.Contains()调用order多少次,都应该为每对taskgetOrdersForTask值调用一次task相同的n值,因为输入序列仅迭代(最多)一次。但是,情况似乎并非如此;如果我为task的所有值调用函数n * number of orders * number of tasks次,则分析会显示对Contains()的{​​{1}}次调用。

Seq.cache替换Seq.toList会产生我预期的效果,但我希望避免承担Seq.toList的费用。

我对Seq.cache或使用中的错误有什么误解?

0 个答案:

没有答案