2012-10-28 11 views
6
val inArray = Array("a", "b", "c", "d") 
// ... 
val outArray = Array("a1", "a2", "a3", "b1", "b2", "b3", "c1", "c2", "c3", "d1", "d2", "d3") 

inArrayへのマッピング方法outArrayへ?Scalaで1つの要素を多くの要素に変換またはマップできますか?

考え方は、inArrayを繰り返して、各要素から3つの要素(この例ではインデックスを連結することによって)を生成することです。

答えて

11

flatMapでこれを行うことができます。

inArray.flatMap(c => (1 to 3).map(c+)) 
+0

まあで詳細に説明したように、これは、カバーの下にマップやflatMapの組み合わせを使用していますため、理解

for { s <- inArray i <- Array(1, 2, 3) //or other traversable } yield s + i 

を使用してよく見えることができます数値インデックスではありませんか?私は実際に入力要素のカスタム関数を使って3つの出力要素を生成したいと考えています。 – Ivan

+1

あなたのカスタム関数がコレクションを返すと仮定した場合、 'inArray.flatMap(customFunction)' –

+0

ありがとう。それでおしまい。すべてのanwersは働き、upvotesを得るが、あなたは最初だった:-) – Ivan

5

forを使用しています。

scala> for { 
    | x <- Array("a", "b", "c", "d") 
    | n <- 1 to 3 
    | } yield x + n 
res0: Array[java.lang.String] = Array(a1, a2, a3, b1, b2, b3, c1, c2, c3, d1, d2, d3) 
6

これはどのような接尾辞場合、SLS

関連する問題