66 votes

Comment puis-je en correspondance du modèle des tableaux dans la Scala?

Ma définition de la méthode se présente comme suit

def processLine(tokens: Array[String]) = tokens match { // ...

Supposons que je souhaite savoir si la deuxième chaîne est vide

case "" == tokens(1) => println("empty")

Ne compile pas. Comment dois-je faire?

106voto

Ruediger Keller Points 1629

Si vous voulez en correspondance du modèle sur le tableau pour déterminer si le deuxième élément est la chaîne vide, vous pouvez effectuer les opérations suivantes:

def processLine(tokens: Array[String]) = tokens match {
  case Array(_, "", _*) => "second is empty"
  case _ => "default"
}

L' _* se lie à un nombre quelconque d'éléments dont aucun. Ceci est similaire pour le match suivant sur la liste, qui est probablement mieux connu:

def processLine(tokens: List[String]) = tokens match {
  case _ :: "" :: _ => "second is empty"
  case _ => "default"
}

7voto

synapse Points 1353

Ce qui est extra cool, c'est que vous pouvez utiliser un alias pour que les choses appariés en _* avec quelque chose comme

val lines: List[String] = List("Alice Bob Carol", "Bob Carol", "Carol Diane Alice")

lines foreach { line =>
  line split "\\s+" match {
    case Array(userName, friends@_*) => { /* Process user and his friends */ }
  }
}

6voto

paradigmatic Points 20871

Motif correspondant peut ne pas être le bon choix pour votre exemple. Vous pouvez tout simplement faire:

if( tokens(1) == "" ) {
  println("empty")
}

La correspondance de modèle est plus approprié pour les cas comme:

for( t <- tokens ) t match {
   case "" => println( "Empty" )
   case s => println( "Value: " + s )
}

qui imprimer quelque chose pour chaque jeton.

Edit: si vous voulez vérifier s'il existe un jeton qui est une chaîne vide, vous pouvez aussi essayer:

if( tokens.exists( _ == "" ) ) {
  println("Found empty token")
}

3voto

missingfaktor Points 44003

case déclaration ne fonctionne pas comme ça. Qui devrait être:

case _ if "" == tokens(1) => println("empty")

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