scala:产生一系列元组而不是map

时间:2015-06-12 15:41:56

标签: scala dictionary tuples

这是我的代码。令我惊讶的是,它产生了一张地图,而不是我所期望的一系列元组。在scala中获取元组列表的正确方法是什么?

for ((_, s) <- Constants.sites;
         line <- Source.fromFile(s"data/keywords/topkey$s.txt").getLines
    ) yield ((s, line))

2 个答案:

答案 0 :(得分:1)

原因可能是Constants.sitesMap,因此会返回地图。

不是在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