J'ai ci-dessous une description d'une structure de données dont j'ai besoin et je veux la mettre en œuvre en utilisant des structures de données immuables. J'essaie de déterminer ... existe-t-il une structure de données existante qui soutiendra ce que j'essaie de faire ici ou dois-je en créer un - et si j'ai besoin de le créer, quel serait un bon endroit pour commencer (blocs de construction)?F # Immuable structure variable de données de fenêtre de taille
J'ai un flux continu de valeurs entrantes d'un certain type. Je veux les ajouter à une structure de données persistante/immuable pour en contenir un historique, et à chaque ajout, il passera en revue l'historique et déterminera si un ou plusieurs éléments plus anciens seront supprimés (par exemple, si l'historique est> un certaine longueur ou une valeur a une certaine propriété).
Les listes sont seules listes liées, non? Donc, l'accès et le retrait sur la queue seraient très inefficaces, alors cela ne fonctionnerait pas bien. Je n'avais pas vraiment considéré le set depuis que j'ai supposé qu'il n'était pas ordonné (idiot moi). Mais un ensemble ordonné ... à droite, ça ferait probablement l'affaire. Sauf, chaque nouveau sera toujours ajouté à la tête. Et s'il utilise des arbres binaires, cela signifie qu'il finira par être une liste doublement chaînée et qu'il sera très inefficace dans mon cas d'utilisation puisque la suppression de la fin impliquerait la copie de tous les nœuds. – mentics
@taotree: implémentation interne '' Set <'a> est un arbre rouge-noir, il prend en charge de manière très efficace O (n lg) pour un accès aléatoire, insérer et supprimer. Puisque l'arbre est équilibré, il ne se transforme pas en une liste liée et ne nécessite pas de copier l'arbre entier. – Juliet
D'accord, je l'avais vu ceci: http://msdn.microsoft.com/en-us/library/ee353619.aspx et dit arbre binaire et je pensais, euh ... oh mais je l'ai vu à le fond de celle-ci: http://en.wikibooks.org/wiki/F_Sharp_Programming/Sets_and_Maps droit ... arbre rouge-noir = bonté performance. Microsoft devrait être plus précis dans leur doc. Merci! – mentics