如何从字典中删除项目并更改其他人的密钥F#

时间:2017-12-17 17:19:55

标签: dictionary f#

我希望创建一个函数,它接受一个值,在字典中找到值,然后将其删除,同时还要通过字典并使值的键值减少一个,就像这样(字典中值的键是从1开始的int值):

let deleteitem (item: Gitem) = 
    let mutable count = 1
    while count<=invendict.Count do
        let testitem = invendict.Item[count]
        if item = testitem then
            invendict.Remove[count]
        //from here, look at every value, whos key is higher than the key of 
        the removed value, and decreases the key by one, till every value is looked at

1 个答案:

答案 0 :(得分:3)

根据示例中的代码片段,字典中的键只是字典中的索引(因为代码示例中的循环从1迭代到invendict.Count)。在这种情况下,使用字典是一个坏主意。您可以使用ResizeArray(这是.NET通用可变List<T>类型的F#类型别名。)

ResizeArray删除项目完全符合您的需要:

let r = ResizeArray ["A";"B";"C"]
r.RemoveAt(1) // Remove the B element
r.[0]         // Returns A as before removal
r.[1]         // Returns C which was at 2 before the removal

如果你真的想使用字典,那么你基本上需要创建一个新字典 - 重新创建字典可能比删除和添加一半字符更有效。