/ / Créer une carte à partir de Tuples dans Scala - scala, programmation fonctionnelle

Créer une carte à partir de Tuples dans Scala - Scala, programmation fonctionnelle

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 № 1

Je 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)