如何从 Map 中获取不同类型的元素

How to take different types of elements from Map

这里我得到了两个哈希集:

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 a = graph.get("v")
a match {    
  case _ => val v = a 
}
val b = graph.get("e")
b match {
  case _ => val e = b
}

但是 ve 被识别为 Option[HashSet[_]] 而我想要的是 HashSet[String]HashSet[RDFTriple].

我该怎么做?

我会非常感激它,因为它困扰我太久了。

不建议在同一个 Map 中使用不同的类型,但是您可以像这样使用 SomeasInstanceOf 来解决问题:

val v = a match {    
  case Some(a) => a.asInstanceOf[HashSet[String]]
  case None    => // do something
}

请注意,赋值 val v = ... 是在 match 之外完成的,以允许之后使用该变量。边缘的 match 类似。


但是,更好的解决方案 是为图表使用案例 class。这样就省去了很多麻烦。

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]