3

viaを取得するタイプf:A => Bの配列に関数をマップするクリーンな方法があることを私は知っています。fooArray[A]Array[B]foo.map{f}

すべての要素を typeの要素にマッピングしながら、 の配列構造を保持するを取得するためにマップfするクリーンな方法はありますか?bar:Array[Array[A]]Array[Array[B]]barAB

一般に、任意の次元 (つまり、2D だけでなく 3D、4D など) の配列の要素をマップする方法はありますか?

4

1 に答える 1

7

マップ内でマッピングできます:

bar.map(_.map(f))

異なる次元の配列は異なる型であるため、任意の次元の配列をマップするタイプセーフな方法があるとは思えません。しかし、ネストされた map 呼び出しを維持するのは簡単です:

scala> val bam = new Array[Array[Array[Array[Array[A]]]]](0)
bam: Array[Array[Array[Array[Array[A]]]]] = Array()

scala> bam.map(_.map(_.map(_.map(_.map(f)))))
res1: Array[Array[Array[Array[Array[B]]]]] = Array()

実際、shapelessには「任意にネストされたデータ構造に対する一般的なマップおよびフォールド操作」があることがわかりました。でテストしていませんがArray、他のデータ構造でも動作するようです。

everywhere(f)(bam)
于 2012-04-06T21:46:48.890 に答える