gpt4 book ai didi

python - 如何建立一个有限制的撤销存储?

转载 作者:太空宇宙 更新时间:2023-11-04 09:20:27 24 4
gpt4 key购买 nike

我想构建一个数据结构来存储有限的撤销缓冲区,以存储 6 个字典数据为例,伪代码如下:

rawdict1 = {1}
buffer = [{1}]

rawdict1 = {2}
buffer = [{2}{1}] # {1} stored on the postion

rawdict1 = {3}
buffer = [{3}{2}{1}]
...
rawdict1 = {5}
buffer = [{5}{4}{3}{2}{1}] # max length limited to 5

rawdict1 = {6}
buffer = [{6}{5}{4}{3}{2}] # {1} has been deleted because exceed the limit

when I want to restore the rawdict1 later, I can use something looks like:

rawdict1 = buffer[5] # restore the 5th dict.

我的问题是,现有的内置数据类型或标准库类型是否可以用于此目的?

这样的结构是否可以在一个结构实例中存储多种类型,比如说,如果我想一次性存储dict和自定义类?

谢谢!

Rgs,

KC

最佳答案

也许使用这样的东西:

import collections

class UndoBuffer(object):
def __init__(self,value,max_length=5):
self.max_length=max_length
self._buffer=collections.deque([value],max_length)
@property
def data(self):
return self._buffer[-1]
@data.setter
def data(self,value):
self._buffer.append(value)
def restore(self,index):
self.data=self._buffer[index]

创建一个 UndoBuffer 对象

rawdict=UndoBuffer('{1}')      

设置 data 属性会自动将值存储在 _buffer 中:

print(rawdict._buffer)
# deque(['{1}'], maxlen=5)
print(rawdict.data)
# {1}

更改 rawdict.data 的值会将值附加到 rawdict._buffer:

rawdict.data = '{2}'
print(rawdict._buffer)
# deque(['{1}', '{2}'], maxlen=5)

Buf 如果您访问 rawdict.data,您只会获得最新的值:

print(rawdict.data)
# {2}

多改几次这个值。当缓冲区填充到其最大长度时,'{1}' 被丢弃:

rawdict.data = '{3}'
rawdict.data = '{4}'
rawdict.data = '{5}'
print(rawdict._buffer)
# deque(['{1}', '{2}', '{3}', '{4}', '{5}'], maxlen=5)
rawdict.data = '{6}'
print(rawdict._buffer)
# deque(['{2}', '{3}', '{4}', '{5}', '{6}'], maxlen=5)

从 rawdict._buffer 恢复值:

rawdict.restore(0)   # set rawdict.data to rawdict._buffer[0]
print(rawdict.data)
# {2}
print(rawdict._buffer)
# deque(['{3}', '{4}', '{5}', '{6}', '{2}'], maxlen=5)

关于python - 如何建立一个有限制的撤销存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3384643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com