Tôi muốn triển khai tùy chọn UNDO và REDO (như chúng tôi thấy trong từ MS, v.v.). Bạn có thể gợi ý cho tôi một cấu trúc dữ liệu cho nó không, và làm thế nào tôi có thể thực hiện nó.cấu trúc dữ liệu được sử dụng để triển khai tùy chọn UNDO và REDO
Trả lời
Nó không phải là cấu trúc dữ liệu mà là một mẫu thiết kế. Bạn đang tìm kiếm Command Pattern.
Tiêu chuẩn là giữ các đối tượng Command trong ngăn xếp để hỗ trợ hoàn tác đa cấp. Để hỗ trợ làm lại, một ngăn xếp thứ hai giữ tất cả các lệnh bạn đã hoàn tác. Vì vậy, khi bạn bật ngăn xếp hoàn tác để hoàn tác một lệnh, bạn nhấn lệnh tương tự bạn đã bật vào ngăn xếp làm lại. Bạn làm điều tương tự ngược lại khi bạn làm lại một lệnh. Bạn bật ngăn xếp làm lại và đẩy lệnh xuất hiện trở lại ngăn xếp hoàn tác.
Cacao mục tiêu-C có một tài liệu anwser được đặt tên tốt là NSUndoManager.
Bạn có thể sử dụng Command Pattern để đạt được chức năng Undo/Redo
Kiểm tra các mẫu:
Trên thực tế, mô hình tiêu chuẩn cho chức năng này (Gang of Four, thậm chí) là Memento.
Ngoài ra, trong khi hầu hết các chương trình sử dụng Undo/Redo ngăn xếp, afficionados của soạn thảo văn bản nào đó thích Undo/Redo cây để họ không bị mất toàn bộ lịch sử của họ nếu họ lùi lại một vài lệnh, hãy thử một hình mới, và thay đổi suy nghĩ của họ.
Bạn nói đúng. Nếu bạn thêm thông tin thêm về cách nó tương tác với mẫu lệnh, đây sẽ là một câu trả lời tuyệt vời. – Kieveli
Cố gắng xóa sử dụng Memento, Memento có được sử dụng để lưu trữ trạng thái của các đối tượng trước và sau khi thao tác để hoàn tác/làm lại không? – NileshChauhan
Đối tượng tạo Memento sử dụng nó để trả về chính trạng thái đó. Memento chính nó nên được coi như là nó mờ đục. Nhét toàn bộ tiểu bang vào Memento có vẻ như là một lựa chọn thực hiện rõ ràng, nhưng nó có thể dễ dàng là một sự khác biệt, hoặc một id vào một cửa hàng sao lưu, hoặc cái gì khác. –
Đây là trường hợp cổ điển của Mẫu lệnh. Sau đây là triển khai mẫu tính năng hoàn tác bằng Python:
from os import rename
class RenameFileCommand(object):
def __init__(self, src_file, target_file):
self.src_file=src_file
self.target_file=target_file
def execute(self):
rename(self.src_file, self.target_file)
def undo(self):
rename(self.target_file,self.src_file)
class History(object):
def __init__(self):
self.commands=list()
def execute(self, command):
command.execute()
self.commands.append(command)
def undo(self):
self.commands.pop().undo()
if __name__=='__main__':
hist=History()
hist.execute(RenameFileCommand('test1.txt', 'tmp.txt',))
hist.undo()
hist.execute(RenameFileCommand('tmp2.txt', 'test2.txt',))
- 1. Cấu trúc dữ liệu tốt nhất để triển khai từ điển?
- 2. Cấu trúc và triển khai ứng dụng web
- 3. Có cấu trúc dữ liệu biểu đồ nào được triển khai cho C#
- 4. Làm cách nào để triển khai cấu trúc dữ liệu DOM chung trong C++?
- 5. Cấu trúc dữ liệu nào sẽ sử dụng?
- 6. Thuật toán và cấu trúc dữ liệu triển khai cho các lập trình C
- 7. Cây triển khai và cấu trúc dữ liệu khác với ruby
- 8. Cấu trúc và cấu trúc dữ liệu khác nhau
- 9. Triển khai tốt nhất cho cấu trúc dữ liệu cặp giá trị khóa?
- 10. Cấu trúc cơ sở dữ liệu để triển khai đăng nhập xã hội?
- 11. Cấu trúc dữ liệu để chọn các nhóm máy
- 12. Thuật toán và cấu trúc dữ liệu
- 13. Cấu trúc dữ liệu có thể phát triển trong MATLAB
- 14. Tóm tắt các chi tiết triển khai cấu trúc dữ liệu trong Clojure
- 15. Tôi sử dụng cấu trúc dữ liệu nào ở đây?
- 16. Việc sử dụng cấu trúc dữ liệu Heap là gì?
- 17. Thực hiện các cấu trúc dữ liệu tùy chỉnh Sử dụng các giao thức Clojure
- 18. Loại cấu trúc dữ liệu nào được sử dụng cho các bản đồ bất biến?
- 19. Cấu trúc dữ liệu được sử dụng để xây dựng hệ thống tệp?
- 20. Cấu trúc dữ liệu C#
- 21. Cấu trúc dữ liệu Trie - Java
- 22. Tùy chọn sử dụng giữa cấu trúc và lớp trong ngôn ngữ D
- 23. Tạo cấu trúc dữ liệu như cấu trúc dữ liệu trong Java
- 24. Tôi nên sử dụng cấu trúc dữ liệu nào để tạo lớp "BigInteger" của riêng mình?
- 25. kích thước bộ nhớ của cấu trúc dữ liệu Python
- 26. Cấu trúc cơ sở dữ liệu cho dữ liệu chủ được chọn lọc ghi đè cho mỗi khách hàng
- 27. Cấu trúc cơ sở dữ liệu để lưu trữ dữ liệu lịch sử
- 28. Cấu trúc dữ liệu nhanh hơn để tìm kiếm chuỗi
- 29. Cấu trúc dữ liệu trong Python
- 30. Sử dụng nguồn dữ liệu được chia sẻ cho báo cáo được tạo động và được triển khai
Ngoài ra, điều quan trọng là luôn xóa ngăn xếp Làm lại nếu bạn đẩy một lệnh khác. – Balk
Cấu trúc dữ liệu là Ngăn xếp với các đối tượng của các đối tượng "Lệnh". – zinovii
Tôi cảm thấy như mô hình lệnh không nhất thiết là cách bạn thực hiện hoàn tác, nó chỉ là một lựa chọn, cũng không phải là câu trả lời cho câu hỏi của OP. Các ngăn xếp undo/redo là câu trả lời. (Mặc dù tôi cho rằng anh ta đã đề cập đến MSWord.) –