Voglio implementare l'opzione UNDO e REDO (come vediamo in MS word, ecc.). Puoi suggerirmi una struttura dati per questo, e come posso implementarlo?struttura dati utilizzata per implementare l'opzione UNDO e REDO
risposta
Non è una struttura dati ma un modello di progettazione. Stai cercando il Command Pattern.
Lo standard è di mantenere gli oggetti Command in una pila per supportare l'annullamento a più livelli. Per supportare il ripristino, un secondo stack mantiene tutti i comandi che hai annullato. Quindi, quando si apre lo stack di annullamento per annullare un comando, si preme lo stesso comando che è stato eseguito nella pila di ripetizione. Fai la stessa cosa al contrario quando rifai un comando. Si apre lo stack di ripetizione e si reinserisce il comando popped nello stack di annullamento.
Objective-C Il cacao ha un anwser ben documentato denominato NSUndoManager.
È possibile utilizzare modello di comando per achive Undo/Redo
Controllare questi campioni:
In realtà, il modello standard per questa funzionalità (Gang of Four, anche) è Memento.
Inoltre, mentre la maggior parte dei programmi utilizzano Undo/Redo pile, estimatori di alcuni editor di testo preferiscono Undo/Redo alberi in modo che essi non perdono tutta la loro storia se annullare alcuni comandi, provare una nuova e cambiare idea.
Hai ragione. Se aggiungi ulteriori informazioni su come interagisce con lo schema di comando, questa sarebbe un'ottima risposta. – Kieveli
Provare a cancellare l'uso di Memento, Is Memento utilizzato per memorizzare lo stato degli oggetti prima e dopo l'operazione per undoo/redo? – NileshChauhan
L'oggetto che produce il Memento lo utilizza per tornare a quello stato. Il Memento stesso dovrebbe essere trattato come se fosse opaco. Riempire l'intero stato nel Memento sembra una scelta di implementazione ovvia, ma potrebbe facilmente essere un diff o un id in un backing store o qualcos'altro. –
Questo è un caso classico di Command Pattern. Di seguito è riportata un'implementazione di esempio della funzionalità di annullamento in 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. per l'implementazione di undo/redo in clojure
- 2. Realm offre undo/redo come CoreData?
- 3. Struttura dati utilizzata per i messaggi SMS in Android
- 4. Struttura dati utilizzata per l'implementazione di fogli di calcolo
- 5. La migliore struttura dati per implementare un dizionario?
- 6. Struttura dati per implementare un dizionario con più indici?
- 7. Struttura database per struttura dati ad albero
- 8. migliore struttura dati per dati multidimensionali?
- 9. Struttura dati per gioco Punti e scatole
- 10. Struttura dati efficiente per classifica
- 11. Haskell Prelude Hidden, UNDO?
- 12. Qual è la struttura dati sottostante per gli elenchi Python?
- 13. Implementare una struttura dati simile a un grafico in Rust
- 14. Redo scorciatoia da tastiera per Eclipse
- 15. Java: Differenza tra una raccolta e "Struttura dati"
- 16. Che tipo di struttura dati viene utilizzata per le mappe immutabili?
- 17. struttura dati per Albero familiare
- 18. Struttura dati spaziali per i giochi
- 19. Struttura dati efficiente per inserimento
- 20. Come inserire il set di dati in un file .pkl nel formato esatto e nella struttura dati utilizzata in "mnist.pkl.gz"?
- 21. Struttura dati per un mondo casuale
- 22. Impossibile comprendere Annulla Redo Framework in Qt
- 23. Undo git mv (rinominare)
- 24. Mercurial Undo Merge
- 25. remove ColorFilter/undo setColorFilter
- 26. La struttura dati della corda
- 27. Elenco Javascript come struttura dati?
- 28. e disfare struttura dati con Perl6
- 29. Esportare struttura e dati (come in PhpMyAdmin)
- 30. Struttura dati Python per efficiente add, remove e random.choice
Inoltre, è importante cancellare sempre lo stack di ripetizione se si preme un altro comando. – Balk
La struttura dati è Stack con istanze di oggetti "Comando". – zinovii
Mi sembra che lo schema di comando non sia necessariamente il modo in cui si implementa l'annullamento, è solo un'opzione, né la risposta alla domanda dell'OP. Le pile di annullamento/ripetizione è la risposta. (Anche se suppongo abbia menzionato MSWord.) –