は、私は常に自分自身がScalaの地図反復可能
val map = Map(foo.map(x=>(x, f(x)))
を書い見つけしかし、Map.apply
だけ変数の引数を取りますので、これは実際に動作しません - 私は
val map = Map(foo.map(x=>(x, f(x)) toSeq :_*)
私が欲しいものを得るには、それは痛いようです。タプルのIterable
からMap
を構築するにはもっときれいな方法がありますか?
は、私は常に自分自身がScalaの地図反復可能
val map = Map(foo.map(x=>(x, f(x)))
を書い見つけしかし、Map.apply
だけ変数の引数を取りますので、これは実際に動作しません - 私は
val map = Map(foo.map(x=>(x, f(x)) toSeq :_*)
私が欲しいものを得るには、それは痛いようです。タプルのIterable
からMap
を構築するにはもっときれいな方法がありますか?
トラバーサブル/イテラブルの要素がTuple2
である場合に定義されるTraversableOnce.toMap
を使用してください。 (API)
val map = foo.map(x=>(x, f(x)).toMap
代わりにあなたがmap
コールへの暗黙的なCanBuildFrom
引数として使用collection.breakOut
を使用することができます。予想されるタイプに基づいて結果ビルダーが選択されます。
scala> val x: Map[Int, String] = (1 to 5).map(x => (x, "-" * x))(collection.breakOut)
x: Map[Int,String] = Map(5 -> -----, 1 -> -, 2 -> --, 3 -> ---, 4 -> ----)
それは一度だけのコレクションを反復処理としては、.toMap
バージョンよりも良好に機能します。
これはそれほど明白ではありませんが、これもまた理解のために機能します。
scala> val x: Map[Int, String] = (for (i <- (1 to 5)) yield (i, "-" * i))(collection.breakOut)
x: Map[Int,String] = Map(5 -> -----, 1 -> -, 2 -> --, 3 -> ---, 4 -> ----)
ありがとうございます - 他の人が 'CanBuildFrom'の狂気に対する数多くの説明にリンクして貼り付けることなく読まなければならないコードでは使用しませんが、不変の範囲を 'mutable.Map'に変換します。ここで私が前に受け入れた答えは私に型エラーを与えます。 – themel
val map = foo zip (foo map f) toMap
あるいは、 'foo.mapValues(F).toMap'。 – missingfaktor
@missingfaktorはmap以外のクラスにメソッドをマップしますか? – juanchito
@mayonesa、いいえ、私は当時はそれほど良く分かりませんでした! :) – missingfaktor