这里我有两个哈希集:
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
}
但v
和e
被识别为Option[HashSet[_]]
,而我想要的是HashSet[String]
和HashSet[RDFTriple]
。
我该怎么做?
我会非常感激,因为它太困扰了我。
答案 0 :(得分:1)
建议不要在同一个Map
中使用不同的类型,但是使用Some
和asInstanceOf
就可以解决这个问题:
val v = a match {
case Some(a) => a.asInstanceOf[HashSet[String]]
case None => // do something
}
请注意,分配val v = ...
是在match
之外完成的,以允许在之后使用变量。边缘的match
类似。
然而,更好的解决方案将使用图表的案例类。那你就可以避免很多麻烦。
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]