J'ai une liste comme les suivantes: Je veux vérifier si J'ai essayé ce qui suit : P> src_999 code> existe. p>
error: value contains is not a member of Any
mapped.foreach(a => print(a._1.contains("SRC_999")))
3 Réponses :
Comment puis-je résoudre ce problème? p> blockQuote>
En ne pas avoir une liste
[Any] code>. P>
En ayant une liste
[tout] code>, vous indiquez explicitement SCALA que les éléments pourraient être n'importe quoi em>. Cela signifie que Scala ne sait rien sur les éléments. Il ne sait même pas s'ils ont une méthode code> code> ou non. Les éléments pourraient être entiers, par exemple, qui n'ont pas de
contiennent la méthode code>. P>
J'ai essayé cela aussi map_temp.map (_. AsinStance de [(chaîne, chaîne)]).
map_temp.foreach (a => si (a._1.contains ("src_999")) {imprimer ("oui sort")}) Résultats: java.lang.classcastException: scala.collection.immutable. $ Colon $ Colon ne peut pas être jeter à java.lang.string
Cela devrait faire ce que vous voulez:
def find[A, B](input: List[(List[A], B)], what: A): Option[B] = input.find(_._1.contains(what)).map(_._2) // should be found assert(find(map_temp, "SRC_999") == Some("TRGT_123")) assert(find(map_temp, "SRC_888") == Some("TRGT_888")) // should not be found assert(find(map_temp, "SRC_998") == None) assert(find(map_temp, "TRGT_123") == None)
Salut Stefanobaghino,
Je reçois comme liste [tout] depuis comme ci-dessous. var r = list.range (0, inst.chargent.length) var srcchars1 = r.map {i => if (1 == 1) inst.Charmappe (i) .srcchars.get d'autre i} var tgtchar1 = r. map {i => if (1 == 1) inst.chargent (i) .tgtchar.get d'autre i} map_temp = srcchars1 zip tgtchar1
Comment l'obtenir comme liste [(Liste [String], String)]?
Donc, je suppose que le 1 == 1 code> dans
si les conditions code> sont des espaces réservés pour autre chose, car ils vont bien sûr toujours évaluer à
vrai code>. Si vous pouvez les supprimer, je recommanderais de le faire. Si vous ne pouvez pas, considérez que le type renvoyé par un
si code> expression doit être un type super des deux branches. Par exemple, le type de
si (true) 4 autre "4" code> est le type Super commun le plus proche à
4 code> de type
int code> et
et
"4" code> de type
chaîne code>, qui se trouve être
tout code>. Drop the
si code> ou assurez-vous que les deux branches renvoient une liste
list [string] code> pour
srcchars1 code> et a
chaîne code> pour
TGTChar1 code>.
Pour la fonction que vous avez écrite, est-il un moyen d'obtenir la seule valeur de chaîne de la liste [(Liste [String], String)] Si SRC_999 quitte
Voulez-vous dire quelque chose avec une signature comme def trouver [A, B] (entrée: liste [(liste [A], b)], Quoi: a): option [b] code>, où dans votre cas
a code> s et
b code> s sont
chaîne code> s? Si tel est le cas, j'ai mis à jour ma réponse (avis que j'ai utilisé l'ancien nom
Rechercher code> pour la nouvelle méthode et j'ai renommé
Rechercher code> sur
Existe code> . Ces noms correspondent mieux à ce qui se passe, comme vous pouvez le dire aux méthodes de bibliothèque standard que j'utilise.
Je vous demande de suggérer une sortie de projet de méthode comme B au lieu de certains (b)
J'ai essayé de passer la sortie de la partie de code que vous avez écrite à la fonction ci-dessous. Def show (x: option [string]) = x correspondez {case (s) => s case non => "?" } Ça marche. Mais est toujours là quand même pour obtenir le premier puits d'oeuvre elle-même comme b au lieu de certains (b)
Je ne le recommanderais pas, car vous devez exprimer que cette méthode peut finir par ne pas trouver l'article que vous recherchez. Si vous allez bien avec null code> S dans votre codeBase, vous pouvez utiliser
ornull code>. Si vous préférez avoir une valeur par défaut, vous pouvez utiliser
getorelse code>.
Alors, était-ce utile?
Le map_temp code> La valeur est
Liste [(Liste [String], String)]] Code>, pas
Liste [Any] Code>. Vous pouvez vérifier l'élément que vous recherchez comme ceci: