2017-11-14 10 views
0

地図から要素の種類を取る方法:私は2個のハッシュセットだ。ここ

var graph = Map[String, HashSet[_]]() 
graph.put("e", edges) 
graph.put("v", vertexes) 

しかし、今、私が撮りたい:私はこのようなマップに入れたい

var vertexes = new HashSet[String]() 
var edges = new HashSet[RDFTriple]() //RDFTriple is a class 

を頂点とエッジはそれぞれ破棄されますが失敗しました。私はHashSet[String]HashSet[RDFTriple]ありたいながら

val a = graph.get("v") 
a match {  
    case _ => val v = a 
} 
val b = graph.get("e") 
b match { 
    case _ => val e = b 
} 

しかしveOption[HashSet[_]]として認識されている:私は次のようなものを試してみました。

どうすればいいですか?

私はあまりにも長い間私を悩ますので、それほど感謝します。

答えて

1

しかし、あなたはこのようにSomeasInstanceOfを使用して、いくつかの問題可能性、同じMapに異なる種類を使用することは推奨されていません。

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] 
+1

ありがとうございました!それは私が欲しいものです – Frank

関連する問題