2017-11-14 1 views
0

지도에서 요소의 다른 유형을하는 방법 :나는 두 해시 세트를 가지고 여기

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[_]]로 인식 : 나는 다음과 같은 일을 시도했습니다.

어떻게하면됩니까?

나는 너무 오랫동안 나를 귀찮게한다.

같은 Map에서 서로 다른 형식을 사용하지 않는 것이 좋습니다

답변

1

그러나 일부이 같은 SomeasInstanceOf를 사용하여 문제가 수 : 할당 val v = ...match 외부에서 수행되는

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

하는 것으로 허용 이후 변수의 사용. 가장자리에 대한 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

관련 문제