2017-09-23 3 views
2

ce qui est le plus proche de Arrays à Elixir. Par tableaux, je veux dire, un conteneur pour les valeurs auxquelles je peux accéder en temps constant.chose la plus proche de tableaux à Elixir

Je l'ai regardé tuple, mais selon la documentation:

Tuples ne sont pas destinés à être utilisés comme un type « collection » (qui est également suggérée par l'absence d'une mise en œuvre du Enumerable protocole pour les tuples): ils sont principalement destinés à être utilisés comme un conteneur de taille fixe pour plusieurs éléments.

Ce que je veux vraiment faire: Je veux stocker n processus dans un tableau et choisir périodiquement un processus aléatoire et envoyer un message. Je suis ouvert à d'autres suggestions aussi.

+0

Voulez-vous également pouvoir supprimer et insérer des processus? – Dogbert

+0

@Dogbert: Je vais ajouter des processus une fois, mais j'ai besoin de supprimer le processus (opération moins fréquente) pour simuler le noeud qui descend. –

+1

Les tuples ont la suppression 'O (n)'. J'irais avec stocker ceci dans une carte qui prend l'heure de 'O (log n)' pour l'accès/insérer/supprimer. Il n'y a pas de structure de données dans Erlang/Elixir avec un accès 'O (1)' et une suppression plus rapide que 'O (n) '. – Dogbert

Répondre

1

J'ai fini en utilisant une combinaison de list et registry depuis que je travaillais avec des processus. Je suis arrivé de nombreuses réponses sur Elixir forum que je suis liste ci-dessous pour référence future:

  1. Tuple: stockées en continu dans la mémoire, le temps d'accès constant, les résultats d'édition dans la copie structure. Est-ce que pas implémente le protocole Enumerable.
  2. linked- List: O (n) temps d'accès, le préfixe est moins cher que le suffixe. Implémente le protocole Enumerable.
  3. Map: O (log n) lire, écrire, supprimer l'heure. Implémente également le protocole Enumerable.
  4. :array: module array de Erlang.
  5. registry: (applicable uniquement si les processus de stockage) Un stockage de processus de valeur-clé local, décentralisé et évolutif.

De même, notez 2 et 3 (Liste et carte) are persistent data structures.

0

Elixir dispose d'un module de tableau via Erlang: http://erlang.org/doc/man/array.html

+2

Les caractéristiques de performance de ceci sont complètement différentes des tableaux dans les langages impératifs, seul le nom est le même. – Dogbert