Scala 如何从地图中获取不同类型的元素

Scala 如何从地图中获取不同类型的元素,scala,scala-collections,Scala,Scala Collections,这里有两个散列集: var vertexes = new HashSet[String]() var edges = new HashSet[RDFTriple]() //RDFTriple is a class 我想把它们放在这样的地图上: var graph = Map[String, HashSet[_]]() graph.put("e", edges) graph.put("v", vertexes) val v = a match { case Some(a) =>

这里有两个散列集:

var vertexes = new HashSet[String]()
var edges = new HashSet[RDFTriple]() //RDFTriple is a class
我想把它们放在这样的地图上:

var graph = Map[String, HashSet[_]]()
graph.put("e", edges)
graph.put("v", vertexes)
val v = a match {    
  case Some(a) => a.asInstanceOf[HashSet[String]]
  case None    => // do something
}
但现在我想分别获取顶点和边,但失败了。我尝试过以下方法:

val a = graph.get("v")
a match {    
  case _ => val v = a 
}
val b = graph.get("e")
b match {
  case _ => val e = b
}
但是v和e被识别为Option[HashSet[]],而我想要的是HashSet[String]和HashSet[RDFTriple]

我该怎么做


我会非常注意它,因为它困扰我太久了。

不建议在同一地图中使用不同的类型,但是您可以使用一些和类似的安装来解决问题:

var graph = Map[String, HashSet[_]]()
graph.put("e", edges)
graph.put("v", vertexes)
val v = a match {    
  case Some(a) => a.asInstanceOf[HashSet[String]]
  case None    => // do something
}
请注意,赋值val v=。。。在匹配之外执行,以允许以后使用变量。边的匹配类似

但是,更好的解决方案是为图形使用case类。这样你就可以避免很多麻烦了

case class Graph(vertexes: HashSet[String], edges: HashSet[RDFTriple])

val graph = Graph(vertexes, edges)
val v = graph.vertexes // HashSet[String]
val e = graph.edges    // HashSet[RDFTriple]

非常感谢你!这就是我想要的