我想建立一个数据结构来存储有限的undo buffer,以存储6 dict数据为例,使用以下伪代码:
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公司
或许可以用这样的方法:
生成UndoBuffer对象
^{pr2}$设置
data
属性会自动将值存储在_buffer
中:更改
rawdict.data
的值会将该值附加到rawdict._buffer
:Buf如果您访问
rawdict.data
,则只获得最新的值:再将值更改几次{1} '在缓冲区填充到其最大长度时被丢弃:
从rawdict.\u缓冲区恢复值:
您可以快速将列表子类化,使其只允许有限的存储。在
Python列表不必是C中的泛型列表那样的特定类型。它们将存储您附加到它们的任何对象。在
您不能在裸名(例如
rawdict1
)上执行此操作,因为您无法截获对裸名的赋值,并使它们在某个时候“附加”执行,例如保存先前的值。对装饰过的名字很容易做到,例如:诸如此类,通过使
undoable
成为一个具有适当的__setitem__
的类的实例,该实例将前一个值(如果有)附加到列表中,并在列表太长时弹出第0项。但这还不足以满足除赋值之外的其他“不可撤销”操作,比如undoable.rawdict1.update(whatever)
——你确定不需要它吗?在相关问题 更多 >
编程相关推荐