这是我的代码。令我惊讶的是,它产生了一张地图,而不是我所期望的一系列元组。在scala中获取元组列表的正确方法是什么?
for ((_, s) <- Constants.sites;
line <- Source.fromFile(s"data/keywords/topkey$s.txt").getLines
) yield ((s, line))
答案 0 :(得分:1)
原因可能是Constants.sites
是Map
,因此会返回地图。
不是在Constants.sites
上运行理解,而是在Constants.sites.values
上运行,而您仍然只使用这些值。
背景是你的代码被翻译成:
Constants.sites.flatMap {
case (_, s) =>
Source.fromFile(s"data/keywords/topkey$s.txt").getLines.map {
line =>
(s, line)
}
}
在flatMap
上调用Map
时,您的结果类型也需要为Map
,并且元组可以强制为Map
。
编辑:但是使用它应该没问题:
for {
(_, s) <- Constants.sites
line <- Source.fromFile(s"data/keywords/topkey$s.txt").getLines
) yield ((s, line))
答案 1 :(得分:0)
您可以将任意地图转换为Seq,如下所示:
scala> val m = Map(1->"one", 2 -> "two")
m: scala.collection.immutable.Map[Int,String] = Map(1 -> one, 2 -> two)
scala> m.toSeq
res0: Seq[(Int, String)] = ArrayBuffer((1,one), (2,two))
在你的情况下你可以做
val result = for ((_, s) <- Constants.sites;
line <- Source.fromFile(s"data/keywords/topkey$s.txt").getLines
) yield ((s, line))
result.toSeq