38 votes

Quelle est la meilleure façon de créer un tableau à croissance dynamique en Scala ?

Je voulais ajouter des éléments dynamiquement dans un tableau. Mais il semble que les tableaux et les listes Scala ne fournissent aucune méthode pour ajouter des éléments dynamiquement en raison de leur nature immuable.

J'ai donc décidé d'utiliser le type de données List pour exploiter cette possibilité : : pour y parvenir. Mon code ressemble à ceci

var outList = List(Nil)
val strArray = Array("ram","sam","bam")

for (str<-strArray)
     outList = str :: outList

Bien que cela fonctionne d'une certaine manière, le problème est que les nouvelles chaînes sont pré-apposées dans la liste. Mais l'exigence idéale est l'ordre des données. Oui, je sais ce que vous pensez, vous pouvez inverser la liste des résultats finaux pour retrouver l'ordre original. Mais le problème est qu'il s'agit d'un énorme tableau. Et je crois que ce n'est pas une solution, même si elle résout le problème. Je pense qu'il devrait y avoir un moyen simple de résoudre ce problème...

Et la raison pour laquelle j'ai hacké Scala est d'apprendre la manière fonctionnelle de coder. Ayant var (type mutable) et remplir la liste à la volée ne me semble pas être une façon fonctionnelle de résoudre les problèmes.

Comment faire ?

Idéalement, je voudrais obtenir quelque chose comme cela en Scala (en dessous de l'élément C# code)

List<int> ls = new List<int>();    
for (int i = 0; i < 100; i++)
    ls.Add(i);

2voto

Aaron Points 1744

Si vous cherchez à créer une nouvelle collection, vous pouvez utiliser le mot-clé "yield" :

val outlist = for(i <- 0 to 100) yield i

Ou bien :

val arrList = "Some" :: "Input" :: "List" :: Nil
val outlist = for ( i <- arrList ) yield i

Techniquement, outlist est un Seq dans les deux exemples ci-dessus, il se peut donc que vous deviez appeler la méthode toList si vous avez besoin de certaines méthodes de List.

1voto

whoisthis Points 23

Nous pouvons utiliser ArrayBuffer comme suggéré. Cependant, j'ai créé un programme simple qui ne prend aucun paramètre pour un tableau d'int et qui vous permet d'entrer les nombres et de les afficher.

val arraySize = scala.io.StdIn.readLine().toInt
  val arr = new ArrayBuffer[Int]() ++ (1 to arraySize).map{
    i =>
      scala.io.StdIn.readLine().toInt
  }
  println(arr.mkString(","))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X