Scala: Création d'une liste de tuples à partir de la liste des éléments en séquence
Je suis très nouveau à la Scala de sorte que cette question peut être très naïf.
J'ai une liste comme ça List[Int] = List(0, 3, 6, 12, 14, 15, 16, 17)
. Je suis en train de créer une liste comme ça [(0,3),(3,6),(6,12)..]
et ainsi de suite. Jusqu'à présent c'est ce que j'ai essayé:
val l1= List(0, 3, 6, 12, 14, 15, 16, 17)
var l2=scala.collection.mutable.ListBuffer[(Int,Int)]()
l1.zipWithIndex.slice(0,l1.length-1).foreach(x=>{val newval=(x._1,l1(x._2+1)); l2+=newval})
Deux questions ici:
- Si je n'utilise pas
val newval
, c'est à dire essayer de fairel1.zipWithIndex.slice(0,l1.length-1).foreach(x=>l2+=(x._1,l1(x._2+1)))
, le compilateur dit:
<console>:10: error: type mismatch;
. Pourquoi est-ce?
found : Int
required: (Int, Int)
l1.zipWithIndex.slice(0,l1.length-1).foreach(x=>l2+=(x._1,l1(x._2+1))) - Ce serait un moyen de le faire sans la mutable listbuffer?
OriginalL'auteur rivu | 2015-08-04
Vous devez vous connecter pour publier un commentaire.
+=
est une méthode sur laListBuffer
l2
qui accepte répété paramètres. Cela signifie que lorsque vous faites quelque chose comme cela:.. Le compilateur pense que vous essayez d'ajouter plusieurs
Int
s à laListBuffer
, lorsque vous essayez d'ajouter un tuple. Vous avez besoin d'un jeu supplémentaire de parenthèses.Vous pouvez utiliser
sliding
, ce qui permettra de créer une "fenêtre glissante" à travers la collection de retourner une liste de listes spécifiques d'un groupe de taille, avec une taille de pas de un par défaut:OriginalL'auteur Michael Zajac
outre le glissement, vous pourriez glisser comme suit:
mis à jour
size
peut êtreO(n)
, donc je préfère ledropRight
, puisdrop
pour la symétriemais
dropRight
est O(n)....la taille n'est pas O(n), mais prendre est. Je suppose qu'à l'exception de la tête & queue, d'autres méthodes sur la Liste sont tous des O(n).
l1.init
serait plus idiomatique quel1.take(l1.size - 1)
vous avez raison, je me suis trompé sur
dropRight
mise en œuvre. J'ai fait de la pensée deStream
mise en œuvre. De toute façon, n'est-ce pas l'ensemble de latake
partie redondante,zip
ne prend généralement des éléments déjà existants, de toute façon? (même si, je suis d'accord que le fait de garantir les deux listes ont la même longueur est plus lisible)OriginalL'auteur user1484819