the*_*mel 21 scala scala-collections
scala.collection.Map从其他馆藏构建,我经常发现自己写作:
val map = Map(foo.map(x=>(x, f(x)))
Run Code Online (Sandbox Code Playgroud)
但是,由于Map.apply只接受变量参数,因此这不起作用- 所以我必须写:
val map = Map(foo.map(x=>(x, f(x)) toSeq :_*)
Run Code Online (Sandbox Code Playgroud)
得到我想要的东西,但这看起来很痛苦.有没有比Map从Iterable元组构造一个更漂亮的方法?
Deb*_*ski 31
TraversableOnce.toMap如果Traversable/Iterable的元素属于类型,则定义使用Tuple2.(API)
val map = foo.map(x=>(x, f(x)).toMap
Run Code Online (Sandbox Code Playgroud)
另外,您可以将use collection.breakOut用作调用的隐式CanBuildFrom参数map。这将根据预期的类型选择结果生成器。
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 -> ----)
Run Code Online (Sandbox Code Playgroud)
它会比.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 -> ----)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16565 次 |
| 最近记录: |