我能想到的一件事是有一个数组数组。像这样的:
Actual Data = []
Bitmap History = [[]]
End Index = 0
添加 [4, 5]
Actual Data = [[4, 5]]
Bitmap History = [ [00], [11] ]
End Index= 1
添加 [6, 7]
Actual Data = [[4, 5], [6, 7]]
Bitmap History = [ [0000], [1100], [1111] ]
End Index = 2
添加 [8, 9]
Actual Data = [[4, 5], [6, 7], [8, 9]]
Bitmap History = [ [000000], [110000], [111100], [111111] ]
End Index = 3
在索引 0 处添加 [1,2]
Actual Data = [[1,2], [4,5], [6,7], [8,9]]
Bitmap History = [ [00000000], [00110000], [00111100], [00111111], [11111111] ]
End Index = 4
删除 9
Actual Data = [[1,2], [4,5], [6,7], [8,9]]
Bitmap History = [ [00000000], [00110000], [00111100], [00111111], [11111111], [11111110] ]
删除 8
Actual Data = [[1,2], [4,5], [6,7], [8,9]]
Bitmap History = [ [00000000], [00110000], [00111100], [00111111], [11111111], [11111110], [11111100] ]
最后加10
Actual Data = [[1,2], [4,5], [6,7], [8,9], [10]]
Bitmap History = [ [000000000], [001100000], [001111000], [001111110], [111111110], [111111100], [111111000], [111111001] ]
End Index = 7
撤销3次应该→结束索引=4→使用位图历史[111111110]来展平
Flattened Data = [1,2,4,5,6,7,8,9]
有一个名为 flatten() 的方法,它使用位图历史记录中的数据来获取数组的内容并从中创建一个数组。
现在,当您想要撤消时,您所做的就是减少 End Index 的值。要重做,只需增加 End Index 值。 flatten 方法将负责显示实际数据数组中的正确元素。
删除操作会在位图历史记录中插入一个新条目,并关闭该数字的标志。