2012-03-15 5 views
1

스칼라 코드 (몇 시간 전부터 시작)를 읽을 필요가 있습니다. 또한 스칼라의 해시 맵이 키를 비교하는 방법을 확인해야합니다. 일부 게시물을 읽은 후 ==은 값 비교를위한 것이지만 값 비교 (==) 또는 참조 비교를 사용하여 해시지도 (예 : scala.collection.immutable.Map) 키를 비교했는지 여부는 확실하지 않습니다.스칼라의 해시 맵 키 비교

답변

2

HashMap== 및 해싱 방법 ##을 사용하여 키를 비교합니다. Map(List(1) -> 'a, List(1) -> 'b)과 같은 것이 잘못된 두 항목을 포함하기 때문에 참조를 사용할 수 없습니다.

+0

라켓'(HS 정의 (메이크 - 불변 hasheq (리스트 (단점 (리스트 1) 1) (단점 (리스트 1) (2))))) ','아웃 제공 '을 #hasheq (((1) .1) ((1) .2))'완전히 괜찮습니다. –

1

페이지의 소스 코드 (이 웹 사이트에) :

http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.HashMap

나는 간단한 테스트 케이스 (일식에 스칼라 2.9.1)를 썼다. 이클립스에서 디버깅 할 수 있습니다 - 소스 코드의 라인은 api 사이트에서와 같습니다.

class EqualsTest { 

     case class Key(private val value: Int) { 

     override def hashCode() = value 

     override def equals(other: Any) = other match { 
      case that: Key => that.value == value 
      case _ => false 
     } 
     } 

     @Test 
     def test() { 

     val map = Map(Key(1)->1,Key(2)->3,Key(4)->5,Key(5)->2,Key(9)->9) 
     val key = Key(1) 
     val value = map.get(key) //add breakpoint here 

     } 
    }