2012-11-16 3 views
16

groovy (그래프 데이터베이스 용 DSL 인 gremlin)에서 정렬 된지도를 사용하고 싶습니다.그루비에서 정렬 된지도

정렬 된지도에서이 blog post을 보았습니다. 그러나 아직도 약간 혼란 스럽습니다.

  • 정렬 된지도는 어떻게 선언합니까? 지도의 표준 방식과 다른 점이 있습니까? y = [:]?

  • 정렬 된지도를 사용하는 경우 목록에 삽입 된 항목이 삽입 된 순서대로 표시됩니까? 또는 정렬 된 맵의 항목이 정렬되기 전에 sort{}을 실행해야합니까?

답변

37

당신은 너무 같은지도 선언하는 경우 : 당신이 말하는 documentation for LinkedHashMap 보면 그런

def m = [:] 

을, 당신은 기본적으로 그루비 볼 수는 LinkedHashMap

assert m.getClass().name == 'java.util.LinkedHashMap' 

한다 :

해시 테이블 및 링크 된 예측 가능한 반복 순서로 Map 인터페이스의 목록 구현. 이 구현은 HashMap과 달리 모든 항목을 통해 실행되는 이중 연결 목록을 유지 관리합니다. 이 링크 된 목록은 일반적으로 키가 맵에 삽입 된 순서 (삽입 순서) 인 반복 순서를 정의합니다.

그래서 LinkedHashMap 주문을 가지고 있으며, 당신이, 당신은 자바의 정렬 된지도 중 하나를 사용할 수있는 키의 자연 순서를 원하는 경우에 당신은 sort

def m = [ b:1, a:2 ] 

// Sort by descending value 
m = m.sort { -it.value } 

println m // prints [a:2, b:1] 

를 호출하여 그루비의 순서에 영향을 미칠 수 TreeMap

당신이 멋져요에서 이것을 사용하고자하는 말, 당신은 할 수 있습니다 :

// def tm = [ tim_yates:1, F21:2 ] as TreeMap // works as well 
TreeMap tm = [ tim_yates:1, F21:2 ] 
,

그런 다음이 인쇄, 당신은이 키에 의해 정렬됩니다 볼 수 있습니다 : 당신이 키를 추가로

println map // prints [F21:b, tim_yates:a] 

TreeMap 순서를 유지합니다. LinkedHashMap은 새 값을 추가 할 때 자동으로 정렬 된 채로 남아 있지 않습니다.

관련 문제