[解決済み] MapのmapValuesとtransformの違いについて
質問
Scalaの場合
Map
(参照
API
とのセマンティクスとパフォーマンスの違いは何ですか?
mapValues
と
transform
?
任意のマップに対して、例えば
val m = Map( "a" -> 2, "b" -> 3 )
両方
m.mapValues(_ * 5)
m.transform( (k,v) => v * 5 )
は同じ結果をもたらします。
解決方法は?
例えば
Map[A,B]
. 明確にするために 私は、常に不変の
Map
.
mapValues
は関数を取ります。
B => C
ここで
C
は値の新しい型です。
transform
は関数を取ります。
(A, B) => C
ここで、この
C
は、値の型でもある。
そのため、どちらも結果的に
Map[A,C]
.
しかし
transform
関数では、キーの値によって新しい値の結果に影響を与えることができます。
例えば
val m = Map( "a" -> 2, "b" -> 3 )
m.transform((key, value) => key + value) //Map[String, String](a -> a2, b -> b3)
これを
mapValues
はかなり難しいでしょう。
次に違うのは
transform
はストリクトであるのに対し
mapValues
はビューだけを提供し、更新された要素は保存されません。このような感じです。
protected class MappedValues[C](f: B => C) extends AbstractMap[A, C] with DefaultMap[A, C] {
override def foreach[D](g: ((A, C)) => D): Unit = for ((k, v) <- self) g((k, f(v)))
def iterator = for ((k, v) <- self.iterator) yield (k, f(v))
override def size = self.size
override def contains(key: A) = self.contains(key)
def get(key: A) = self.get(key).map(f)
}
(から引用 https://github.com/scala/scala/blob/v2.11.2/src/library/scala/collection/MapLike.scala#L244 )
つまり、パフォーマンス的には、何がより効果的であるかということになります。もし
f
は高価で、結果のマップのいくつかの要素にしかアクセスしません。
mapValues
の方がいいかもしれません。
f
はオンデマンドで適用されるだけです。そうでなければ、私は
map
または
transform
.
transform
で表現することもできます。
map
. 仮に
m: Map[A,B]
と
f: (A,B) => C
であれば
m.transform(f)
は、次のように等価です。
m.map{case (a, b) => (a, f(a, b))}
関連
-
[解決済み] ScalaのバージョンをScala本体から取得するにはどうしたらいいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] なぜdict[key]ではなく、dict.get(key)なのか?
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] ConcurrentHashMapとCollections.synchronizedMap(Map)の違いは何ですか?
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】Scalaにおける中括弧と括弧の正式な違い、また、どのような場合に使用すべきなのか?
-
[解決済み】Scalaのvarとvalの定義の違いは何ですか?
-
[解決済み】地図と辞書の違いは何ですか?
-
[解決済み] Scala:1ステートメントで文字列をファイルに書き込む
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Spark - アプリの投稿時に「設定にマスターURLが設定されている必要があります」というエラーが発生する
-
[解決済み] Sparkです。CoarseGrainedSchedulerが見つかりませんでした。
-
[解決済み] Spark Implicit $ for DataFrame(データフレーム用暗黙の$)。
-
[解決済み] NoClassDefFoundError: org/apache/hadoop/fs/StreamCapabilities (s3データをsparkで読み込む際に発生します。
-
[解決済み] Scala 無名クラスでextendsを使用する方法
-
[解決済み] Scalaのリターン
-
[解決済み】Akka Kill vs. Stop vs. Poison Pill?
-
[解決済み] Scalaの識別子 "implicitly "とは?
-
[解決済み] Scalaは、コレクションをMap-by-keyに変換する最良の方法ですか?
-
[解決済み] Build.scala、%および%%の記号の意味