2011-07-19 3 views
4

Vous voulez convertir ceci:Tableau semi-Aplatir

[["1", "2", "3"], ["4", "5", "6"]] 

à ceci:

["1", "2", "3"], ["4", "5", "6"] 

à passer dans Array.product(), et le premier tableau peut contenir un nombre inconnu d'autres tableaux. par exemple, le tableau donné peut également être

[["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]] 

Et en fin de compte, je dois passer l'argument que:

otherArray.product(["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]) 

Merci à l'avance!

Répondre

5
otherArray.product(*[["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]]); 

* est utilisé dans la liste des arguments pour décompresser le contenu du tableau à des arguments (comme ici) ou d'emballer des arguments dans un tableau, comme dans "def maméthode (* args)"

Référence: http://www.justskins.com/forums/apply-method-to-array-17387.html

+2

Tout un opérateur utile en Python. – JAB

0

La dernière ligne de code mis à part, le reste semble être résolu en utilisant l'index 0:

arr[0] 
+0

Je ne suis pas, cela retournerait seulement le premier tableau des autres, et n'inclurait pas dynamiquement tous les tableaux –

1

Je pense que ce qui fonctionne pour vous est d'utiliser l'expansion Array Ruby:

a=[[1,2,3],[4,5,6]] 
b=[1,2,3].product([1,2,3],[4,5,6]) 
c=[1,2,3].product(*a) 
b == C#This should be true 

Fondamentalement mettre l'astérisque (*) devant la variable étendra tous les éléments du tableau dans une liste d'arguments, qui est ce que tu veux.