如何使用FSharpx的PersistentVector从索引N中删除项目?

时间:2019-09-29 15:12:54

标签: f# immutable-collections fsharpx

我注意到FSharpX的PersistentVector在索引方法上没有删除。

https://fsprojects.github.io/FSharpx.Collections/reference/fsharpx-collections-persistentvector-1.html

它具有在第n个位置修改项目的能力,但不能将其删除。这似乎是一个奇怪的遗漏。如果不可能,那么有人可以建议一个具有这种能力的不可变的持久性集合。

我当前用于从向量中删除 id 处项目的代码是蛮力

            state 
            |> Seq.indexed 
            |> Seq.where ( fun (_id,_)->id<>_id) 
            |> Seq.map (fun (_,p)->p) 
            |> PersistentVector.ofSeq

请注意,我正在尝试将PersistentVector用作UI的后备存储。我正在试验https://github.com/JaggerJo/Avalonia.FuncUI,这是通往阿瓦隆的埃尔米什港口。我走得很远,然后想连续添加一个删除按钮,但找不到更新后备存储的方法。 :(

用户界面的示例代码为

https://gist.github.com/bradphelan/77f3fcb8e660783790c5610290cd8d97

1 个答案:

答案 0 :(得分:0)

我不认为FSharpx.Collection中的任何集合都支持删除,但PersistentHashMap除外,后者具有remove方法。 我确定FSharpx.Experimental.Collections中有一些集合也支持删除/删除。这些可能对您没有用。

您可能要查看这个新项目,以了解您正在尝试的https://github.com/fsprojects/FSharp.Data.Adaptive