Je suis nouveau dans le langage de programmation et j'ai besoin d'aide pour résoudre l'un de mes problèmes.
J'ai besoin de créer une carte entre deux tuple de séquences:
A = tuple1 (tuple1 (tuple1 (x, y), z), a)
B = tuple2 (tuple2 (tuple2 (1,2), 3), 4)
Maintenant, j'ai besoin de quelque chose comme ci-dessous:
C = ((x, 1), (y, 2), (z, 3), (a, 4)) et si je cherche à dire x, alors j’ai besoin d’obtenir 1;
Le nombre de occurrences de tuple est inconnu, maisla structure du tuple sera similaire. Je ne pouvais pas comprendre et cartographier la solution pour des questions similaires dans stackoverflow. Donc, une solution avec explication sera utile
Réponses:
1 pour la réponse № 1Je pense que cela fait le truc (laid).
def toMap(x: (Any,String), y: (Any,Int)): Map[String, Int] = {
@tailrec
def rec(x: (Any,String), y: (Any,Int), map: Map[String, Int]): Map[String, Int] =
x match {
case (a: String, b) =>
val (c: Int, d) = y
map ++ Map(a -> c, b -> d)
case (a: (Any,String), b) =>
val (c: (Any,Int), d) = y
rec(a, c, map ++ Map(b -> d))
}
rec(x, y, Map.empty[String, Int])
}
En supposant que vous vouliez l'utiliser comme ceci:
scala> val a = ((("x","y"),"z"),"a")
a: (((String, String), String), String) = (((x,y),z),a)
scala> val b = (((1,2),3),4)
b: (((Int, Int), Int), Int) = (((1,2),3),4)
scala> toMap(a,b)
res1: Map[String,Int] = Map(a -> 4, z -> 3, x -> 1, y -> 2)