Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
元组iterable的Scala映射_Scala_Scala Collections - Fatal编程技术网

元组iterable的Scala映射

元组iterable的Scala映射,scala,scala-collections,Scala,Scala Collections,从其他集合构建scala.collection.Map,我经常发现自己在写: val map = Map(foo.map(x=>(x, f(x))) 但是,这实际上不起作用,因为Map.apply只接受变量参数-因此我必须编写: val map = Map(foo.map(x=>(x, f(x)) toSeq :_*) 为了得到我想要的,但那似乎很痛苦。有没有一种更漂亮的方法可以从元组的Iterable构建Map呢?使用TraversableOnce.toMap,如果可遍历/It

从其他集合构建
scala.collection.Map
,我经常发现自己在写:

val map = Map(foo.map(x=>(x, f(x)))
但是,这实际上不起作用,因为
Map.apply
只接受变量参数-因此我必须编写:

val map = Map(foo.map(x=>(x, f(x)) toSeq :_*)

为了得到我想要的,但那似乎很痛苦。有没有一种更漂亮的方法可以从元组的
Iterable
构建
Map
呢?

使用
TraversableOnce.toMap
,如果可遍历/Iterable的元素属于
Tuple2
类型,则定义该映射


或者,您可以使用
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 -> ----)
它将比
.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 -> ----)
scala>valx:Map[Int,String]=(对于(i--,1->--,2->--,3->--,4->--)

谢谢这一点-虽然我不打算在其他人必须阅读的代码中使用它,而不粘贴大量关于
CanBuildFrom
疯狂的解释的链接,但它对于我想将一个不可变范围转换为
可变.Map
的情况非常有用,我之前接受的答案只是给了我一个e类型错误。或者,
foo.mapValues(f).toMap
@missingfaktor是否将mapValues作为除Map以外的类的方法?@maynesa,不,但我想我当时还不太清楚!)
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 -> ----)
val map = foo zip (foo map f) toMap