2016-04-22 20 views
2

Ich bin ein Neuling in Scala.Multidimensionales Array Zip-Array in Scala

Ich habe zwei Array wie:

val one = Array(1, 2, 3, 4) 
val two = Array(4, 5, 6, 7) 
var three = one zip two map{case(a, b) => a * b} 

Es ist ok.

Aber ich habe ein mehrdimensionales Array und ein eindimensionales Array nun wie folgt aus:

val mulOne = Array(Array(1, 2, 3, 4),Array(5, 6, 7, 8),Array(9, 10, 11, 12)) 
val one_arr = Array(1, 2, 3, 4) 

ich sie Multiplikation möchte, wie kann ich dies tun in scala?

Vielen Dank im Voraus.

+0

Was soll Ihre Ausgabe sein? –

+0

1 * 1 + 2 * 2 + 3 * 3 + 4 * 4 5 * 1 + 6 * 2 + 7 * 3 + 8 * 4 ..... –

Antwort

2

könnten Sie verwenden:

val tmpArr = mulOne.map(_ zip one_arr).map(_.map{case(a,b) => a*b}) 

Dies würde Sie Array(Array(1*1, 2*2, 3*3, 4*4), Array(5*1, 6*2, 7*3, 8*4), Array(9*1, 10*2, 11*3, 12*4)) geben.

mulOne.map(_ zip one_arr) Hier ordnet jede interne Anordnung von mulOne mit Element der entsprechenden one_arr wie Paare zu erzeugen: Array(Array((1,1), (2,2), (3,3), (4,4)), ..) (Hinweis: I Platzhalter-Syntax verwendet haben). Im nächsten Schritt .map(_.map{case(a,b) => a*b}) vervielfacht jeweils Elemente des Paares Ausgang geben wie: Array(Array(1, 4, 9, 16),..)

Dann könnten Sie verwenden:

tmpArr.map(_.reduce(_ + _)) 

Summe aller internen Array s zu erhalten Array(30, 70, 110)

+0

danke für Ihre Antwort herzlichst –

2

dieses

mulOne.map{x => (x, one_arr)}.map { case(one, two) => one zip two map{case(a, b) => a * b} } 

mulOne.map{x => (x, one_arr)} => innen mulOne für jedes Array Versuchen Sie, ein Tupel mit Inhalt von one_arr erstellen.

.map { case(one, two) => one zip two map{case(a, b) => a * b} } ist im Grunde die Operation, die Sie in Ihrem ersten Beispiel für jedes Tupel ausgeführt haben, das im ersten Schritt erstellt wurde.

+0

Es ist auch hilfreich für mich. Danke –

1

ein erhalten Verwenden für Verständnis so,

val prods = 
    for { xs <- mulOne 
     zx = one_arr zip xs 
     (a,b) <- zx 
     } yield a*b 

und so

prods.sum 

liefert das Endergebnis.