Je souhaite implémenter l'option UNDO et REDO (comme nous le voyons dans MS Word, etc.). Pouvez-vous me suggérer une structure de données et comment puis-je l'implémenter?structure de données utilisée pour implémenter l'option UNDO et REDO
Répondre
Ce n'est pas une structure de données mais un motif de conception. Vous cherchez le Command Pattern.
La norme consiste à conserver les objets de commande dans une pile pour prendre en charge l'annulation multi-niveau. Afin de prendre en charge refaire, une deuxième pile conserve toutes les commandes que vous avez annulées. Ainsi, lorsque vous faites sauter la pile d'annulation pour annuler une commande, vous appuyez sur la même commande que celle que vous avez introduite dans la pile de rétablissement. Vous faites la même chose à l'envers lorsque vous refaites une commande. Vous faites apparaître la pile de rétablissement et repoussez la commande éclatée dans la pile d'annulation.
Objective-C Cocoa a une réponse bien documentée nommée NSUndoManager.
Vous pouvez utiliser modèle de commande pour achive Undo/Redo
Vérifiez ces échantillons:
En fait, le modèle standard pour cette fonctionnalité (Gang of Four, même) est Memento.
En outre, alors que la plupart des programmes utilisent Undo/Redo piles, afficionados de certains éditeurs de texte préfèrent Undo/Redo arbres afin qu'ils ne perdent pas leur histoire si elles défont quelques commandes, essayez une nouvelle, et changer d'avis.
Vous avez raison. Si vous ajoutez plus d'informations sur la façon dont il interagit avec le modèle de commande, ce serait une excellente réponse. – Kieveli
Essayez d'effacer l'utilisation de Memento, Est-ce que Memento est utilisé pour stocker l'état des objets avant et après l'opération pour undoo/redo? – NileshChauhan
L'objet qui produit le Memento l'utilise pour revenir à cet état. Le Memento lui-même devrait être traité comme s'il était opaque. Remplir tout l'état dans le Memento semble être un choix d'implémentation évident, mais il pourrait tout aussi bien être un diff, ou un id dans un backing store, ou quelque chose d'autre. –
Ceci est un cas classique de motif de commande. Voici un exemple d'implémentation de la fonctionnalité d'annulation en 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. Structure de données utilisée pour la structure de répertoire?
- 2. Est-il possible de faire Undo/Redo dans Excel en utilisant C#?
- 3. .NET RichTextBox undo
- 4. Implémenter l'annulation de données dans l'application CRUD existante
- 5. Quelle est la meilleure structure pour implémenter une carte d'identité?
- 6. Structure de données pour les relations
- 7. Meilleure structure de données pour la recherche?
- 8. Structure de données d'arbre
- 9. Données de planification des tâches/structure d'objet
- 10. base de données relationnelle et la structure de réseau
- 11. Structure de données pour la conception d'un cache avec insertion efficace, suppression et récupération de la valeur la plus élevée
- 12. Sémantique de la structure html pour les pages de données
- 13. Structure de données pour stocker des milliards d'entiers
- 14. structure de la base de données
- 15. Structure de données pour stocker des événements récurrents?
- 16. Structure de données pour stocker des matrices creuses
- 17. iPhone: choix de la structure de données
- 18. sélection de la structure de données
- 19. structure du modèle de base de données
- 20. Structure des données du calendrier
- 21. Configuration de base de données CakePHP ACL: Structure ARO/ACO?
- 22. mysql structure pour les commentaires et les réponses de commentaires
- 23. Quel type de structure de données OO dois-je utiliser pour ces données de chaîne?
- 24. 2d Structure de données en C#
- 25. Structure de la base de données pour les données de base remplacées sélectivement par client
- 26. comment analyser une structure de données arborescente?
- 27. Obtenir l'icône de fichier utilisée par Shell
- 28. Quelle est la meilleure structure de données pour les données arborescentes de profondeur fixe en C#?
- 29. Class Dictionary dans java (structure de données)
- 30. Une structure de données pour les mappages 1: 1 en C#
Il est également important de toujours effacer la pile Redo si vous appuyez sur une autre commande. – Balk
La structure de données est empilée avec des instances d'objets "Command". – zinovii
J'ai l'impression que le modèle de commande n'est pas nécessairement la façon dont vous mettez en œuvre l'annulation, c'est juste une option, et ce n'est pas non plus la réponse à la question du PO. Les piles d'annulation/rétablissement sont la réponse. (Bien que je suppose qu'il a mentionné MSWord.) –