10
votes

Les matières mutables multidimensionnelles SCALAA tels que DataStructures

Y a-t-il un moyen de construire des tableaux multi-dimensions dynamiques dans Scala? Je sais que les tableaux de Scala doivent être initialisés dans ses tailles et ses dimensions, donc je ne le veux pas. La structure de données devrait être dynamique. J'ai essayé de le construire avec des listes dans des listes, mais je me suis perdu d'une certaine manière.

Il y a tellement de types différents, peut-être que je n'ai tout simplement pas trouvé le bon. Alors s'il vous plaît, poussez-moi à la bonne direction.


0 commentaires

3 Réponses :


4
votes

Eh bien, cela dépend beaucoup de ce que vous avez l'intention de le faire, mais votre meilleure hypothèse est indexedseq [indexedseq [t]] (ou des enveloppes plus profondes), en utilisant vecteur comme implémentation de indexedseq (c'est la mise en œuvre par défaut de toute façon).

Par exemple:

scala> indexedseq (indexedseq (1, 2, 3), indexedseq (4, 5), indexedseq (6, 7, 8, 9)) RES0: indexedseq [indexedseq [int]]] = vecteur (vecteur (1, 2, 3), vecteur (4, 5), vecteur (6, 7, 8, 9))


5 commentaires

Bonjour, tu pour ta réponse. Comment accéder à une valeur unique dans cette indexage, par exemple Deuxième "rangée", deuxième "colonne", RES0 (2) (2) ou quelque chose comme ça?


@Evildead: Oui. Mais comme je suis sûr que vous savez, SCALA a une solution, donc des choses comme celle-là sont au moins aussi faciles à vous confirmer empiriquement car elles doivent être confirmées ici. Oh, sauf que la deuxième rangée et la deuxième colonne serait vectorielles (1) (1) .


Oui, je veux juste éviter toute erreur :) Et bien sûr, c'est (1) (1), était tardif la nuit dernière. Merci.


@ezvildead je viens de remarquer que vous voulez des structures de données mutables. Pour une raison quelconque, je pensais que vous vouliez une bonne Structure de données immuable . Vecteur est bon car il est persistant et avec le journal (n) Copier / redimensionner, mais si vous voulez une mutabilité, je pense que Rex Kerr a le meilleur jusqu'à présent.


Ok, je vois mon problème principal était que j'ai utilisé mes paquets de distribution pour Scala, qui était 2.7.7. Donc, la plupart des constructions que j'ai trouvées ne fonctionnaient pas. La mise à jour de 2,8 fait clairement de nombreuses choses :)



3
votes

Vous pouvez créer une matrice de 2 dims de manière dynamique comme suit:

val aaa = Array.fill (3) (aa)         


1 commentaires

val aa = array.ofdim [int] (3, 4) est un peu plus gentil et fait la même chose



8
votes

Si vous voulez faire quelque chose comme

A (5) = // résultat de certains calculs

, vous devez utiliser quelque chose de la hiérarchie des collections mutables. Je suggérerais araybuffer . xxx

Notez que remplir vous permet de créer et d'initialiser automatiquement des structures 5D. Notez également que vous pouvez prolonger la longueur de ceux-ci, mais il ne prolongera pas toute la structure multidimensionnelle, celle que vous ajoutez. Donc, par exemple, xxx


1 commentaires

Je le commente ici à nouveau, comme je vois maintenant mon problème utilisait 2,7,7 de ma distribution. Je me demandais pourquoi toutes les choses que j'ai trouvées là-bas ne fonctionnent pas pour moi. Maintenant, avec 2.8 Tout fonctionne bien. J'ai testé votre réponse et tout va bien fonctionner. C'est exactement ce dont j'avais besoin. Grand merci encore