2014-05-20 3 views
0

Je suis très novice avec Scala et, par conséquent, cette question peut être très simple.Comment générer toutes les combinaisons de valeurs-clés possibles entre une chaîne et un tableau [String]

J'ai une variable "myArray" de type Array [(String, Array [String])]. La valeur de ce tableau est

Array((1,Array(2, 3, 4)), (2,Array(1, 3, 4, 6, 7)), (3,Array(1, 2, 4, 5))). 

Si nous pensons que le premier élément pour chaque tuple est une clé (par exemple, dans le tuple (1, Array (2, 3, 4)), 1 est la clé) et reste est la valeur (par exemple, Array (2, 3, 4)), je veux créer un tableau pour lequel les éléments seront toute combinaison possible de paires clé-valeur pour chaque clé correspondante, où la valeur sera chaque élément de Array [chaîne]

le résultat devrait ressembler à

Array((1,Array(1,2)), (1,Array(1,3)), (1,Array(1,4)), (2,Array(2,1)), 
     (2,Array(2,3)), (2,Array(2,4)), ...., (3,Array(3,4)), (3,Array(3,5))) 
+0

Ceci est juste une variante de « Obtenez toutes les combinaisons uniques », bien que dans une langue que je n'ont pas vu une implémentation pour SO. Cela semble toujours être un doublon. – BradleyDotNET

+0

J'ai essayé le code suivant. Mais est-il un moyen plus intelligent de le faire val array2 = array1.map (x => { val b = x._2 val a = val x._1 bsze = b.size (i <- 0 à (bsze-1)) rendement (a (0), b (i)) }) – user3658637

+0

Bienvenue à SO! Essayez de mettre en évidence votre code (utilisez 4 espaces avant de taper du code), afin que les autres utilisateurs puissent lire votre question plus facilement. – gnometorule

Répondre

2

@wingedsubmariner est proche, mais pour correspondre @ exigences étranges de user3658637 la mise en correspondance est:

for { 
    (key, values) <- array 
    value <- values 
    yield (key,Array(key, value))  //> res1: Array[(Int, Array[Int])] = Array((1,Array(1, 2)), (1,Array(1, 3)), (1, 
            //| Array(1, 4)), (2,Array(2, 1)), (2,Array(2, 3)), (2,Array(2, 4)), (2,Array(2, 
            //| 6)), (2,Array(2, 7)), (3,Array(3, 1)), (3,Array(3, 2)), (3,Array(3, 4)), (3 
            //| ,Array(3, 5))) 
1

Si votre tableau est une valeur array:

for { 
    (key, values) <- array 
    value <- values 
} yield (key, value) 
Questions connexes