2011-08-29 4 views
7

Java 1.6에서 NavigableMap (및 NavigableSet) 인터페이스가 도입되었고 TreeMap이 업데이트되어 새 인터페이스를 구현했습니다. 무엇보다 NavigableMap은 "컬렉션에서 X와 가장 가까운 요소는 무엇입니까? (예제 및 토론은 this excellent blog post by François Sarradin을 참조하십시오)NavigableMap의 스칼라 버전이 있습니까?

Scala 2.8의 TreeMap 구현에서 비슷한 것을 찾고 싶었습니다 하지만, 아아, 너무 (최소한, 그것은 분명하지 않습니다) 보이지 않습니다. 자바의 NavigableMap 비슷한 다른 스칼라 클래스 또는 특성 있습니까? 그렇지 않으면 몇 가지 간단한 스칼라 관용구를 사용할 수 있습니다 비슷한 달성하기 위해?

(있는 경우에만 간단하게하기 위해) 내가 자바의 트리 맵을 사용할 수 있습니다 실현,하지만 난 스칼라 컬렉션 프레임 워크 내에서 유지하고 싶습니다.

답변

2

역 참조를 갖는 불변의 컬렉션에서 컬렉션을 영구적으로 만들 수 없습니다. 따라서 대신 사람들은 zippers을 사용하여 이러한 구조를 탐색합니다. 에는 XML 작업시 지퍼를 사용하는 좋은 예가 있습니다.

+0

지퍼가 나무를 수정하는 데 어떻게 도움이 될지는 분명하지만 지퍼를 사용하여 "컬렉션에서 가장 가까운 요소는 X에 가장 가까운 것"과 같은 질문에 답하는 방법이 명확하지 않습니다. 나는 지퍼가 대부분 실험적으로 보이기 때문에 우리가 주로 이론을 이야기하고 있음을 알고 있지만, 지퍼가 앞에서 언급 한 질문에 어떻게 답할 수 있는지 설명 할 수 있습니까? –

+0

@Jim Zippers는 전혀 실험적이지 않습니다. 지퍼에는 검사/업데이트 및 탐색이라는 두 가지 종류의 작업이 있습니다. X에 지퍼가 있으면 네비게이션 기능이 자연스럽게 가장 가까운 요소를 제공합니다. –

+0

아 아아아! 감사. 지퍼에 연결 한 질문은 내게 지퍼가 실험적이라는 느낌을주었습니다. 기꺼이 듣고 그들이 쉽게 사용할 수 있습니다. –

1

SortedMap 당신이 길의 일부를 얻을 수있을 것 같다, 그러나 O는 (로그 (N)) 검색가한다고하는 방식이라면 나는 확실하지 않다 지금까지 테스트 한 것 수 :

이 될 수 O는 (N (로그인))하지만, 실제로 타이밍에 따라 것 같습니다 rangeImpl의 측면에서 fromto의 정의를 바탕으로
def searchMap(m: SortedMap[Int,_], k: Int) = { 
    val left = m to(k) lastKey 
    val right = m from(k) take(2) lastKey 

    if (k - left < right - k) 
     left 
    else 
     right 
} 

, 모든 그럴듯에 대해 선형 적으로 증가 할 나타납니다 n의 값.

잘 모르겠습니다.

+0

왜 그런지 모르겠지만 처음부터 끝까지 두 개의 새로운지도가 생성되는 것은 바람직하지 않을 수 있습니다. –