LinkedHashMap
은 삽입 순서를지도에 유지하는 데 사용되지만 변경 가능한지도에서만 작동합니다. 게재 신청서를 유지하는 불변의 Map
구현은 무엇입니까?삽입 순서를 유지하는 불규칙 스칼라 맵 구현
답변
ListMap은 목록 기반 데이터 구조를 사용하여 변경 불가능한 맵을 구현하므로 삽입 순서가 유지됩니다.
scala> import collection.immutable.ListMap
import collection.immutable.ListMap
scala> ListMap(1 -> 2) + (3 -> 4)
res31: scala.collection.immutable.ListMap[Int,Int] = Map(1 -> 2, 3 -> 4)
scala> res31 + (6 -> 9)
res32: scala.collection.immutable.ListMap[Int,Int] = Map(1 -> 2, 3 -> 4, 6 -> 9)
다음 확장 메서드
-ListMap
의 작업을 할 때
Seq#toListMap
은 매우 유용 할 수 있습니다.
scala> import scalaz._, Scalaz._, Liskov._
import scalaz._
import Scalaz._
import Liskov._
scala> :paste
// Entering paste mode (ctrl-D to finish)
implicit def seqW[A](xs: Seq[A]) = new SeqW(xs)
class SeqW[A](xs: Seq[A]) {
def toListMap[B, C](implicit ev: A <~< (B, C)): ListMap[B, C] = {
ListMap(co[Seq, A, (B, C)](ev)(xs) : _*)
}
}
// Exiting paste mode, now interpreting.
seqW: [A](xs: Seq[A])SeqW[A]
defined class SeqW
scala> Seq((2, 4), (11, 89)).toListMap
res33: scala.collection.immutable.ListMap[Int,Int] = Map(2 -> 4, 11 -> 89)
ListMap에 문제가 있습니다 - 기존 키를 사용하여 update()를 호출하면 항목 순서가 변경됩니다. 예 :'ListMap ("a"→ 1, "b"→ 2) .updated ("a", 2) .toList'는'List ((b, 2), (a, 2))'를 산출합니다. 내 유스 케이스에 대한 불행 : ( –
ListMap
은 삽입 순서를 유지하지만 매우 효율적이지는 않습니다. 검색 시간은 선형입니다. immutable.HashMap
과 immutable.TreeMap
을 모두 래핑하는 새로운 컬렉션 클래스를 만드는 것이 좋습니다. 변경 불가능한 맵은 immutable.HashMap[Key, (Value, Long)]
으로 매개 변수화되어야하며, 튜플에있는 Long
은 TreeMap[Long, Key]
에있는 해당 항목에 대한 포인터를 제공합니다. 그런 다음 옆에 진입 카운터를 두십시오. 이 트리 맵은 게재 신청서에 따라 항목을 정렬합니다.
삽입 및 조회는 간단한 방법으로 구현합니다. 즉, 카운터를 증가시키고, 해시 맵에 삽입하고 카운터 키 쌍을 트리 맵에 삽입합니다. 검색을 위해 해시 맵을 사용합니다.
트리 맵을 사용하여 반복을 구현합니다.
제거를 구현하려면 해시 맵에서 키 - 값 쌍을 제거하고 튜플의 인덱스를 사용하여 트리 맵에서 해당 항목을 제거해야합니다.
+1. 가까운 미래에 stdlib에 그러한 콜렉션이있을 가능성이 있습니까? – missingfaktor
이것은 계획되지 않았지만 스칼라 내부 메일 링리스트에 대한 토론에서 많은 사람들이 이것을 원한다면 그렇다면 이유는 무엇입니까? – axel22
자세히 설명해 주시겠습니까 – axel22
- 1. 삽입 순서를 유지하는 콜렉션을 설정하십시오.
- 2. 스칼라 HashMap : 삽입 순서를 반복 하시겠습니까?
- 3. 순서를 유지하는 HashSet
- 4. SqlBulkCopy로 행 순서를 유지하는 방법?
- 5. 순서를 유지하는 키/값 컬렉션
- 6. Meteor에서 타임 스탬프를 사용하고 삽입 순서를 유지하는 방법은 무엇입니까?
- 7. 스칼라 맵 추가 일반화
- 8. 스칼라 사용자 정의 맵
- 9. 스칼라 함수 맵
- 10. 배열 변경 정렬 순서를 유지하는 알고리즘
- 11. 스칼라 케이스 클래스 구현
- 12. 스칼라 : 맵 확장 및 정의 +
- 13. 프로그래밍 방식으로 유지하는 사이트 맵
- 14. 구글 맵 구현 아이폰
- 15. 웹 맵 서비스 구현
- 16. 삽입 순서를 추적하는 std :: map?
- 17. 와 루프 PHP가 불규칙
- 18. primefaces datatable의 정렬 순서를 유지하는 방법은 무엇입니까?
- 19. IEnumarable 컬렉션에서 항목을 수정하고 순서를 유지하는 방법
- 20. 문자열을 사전 편집 순서를 유지하는 숫자로 매핑하십시오.
- 21. ggplot2 heatmap : 레이블 순서를 유지하는 방법은 무엇입니까?
- 22. 목록 상자 항목 순서를 DataGridView로 유지하는 방법
- 23. invokation chain에서 순서를 유지하는 "유창한 인터페이스"
- 24. JSONKit : JSON 사전 키의 순서를 유지하는 방법을
- 25. 중복을 허용하지 않고 입력 순서를 유지하는 데이터 구조가 있습니까?
- 26. 액터의 스칼라 메시지 버스 구현?
- 27. 커스텀 공유 해시 맵 구현
- 28. 오프라인 GWT 맵 구현 방법
- 29. 특정 위치의 목록에 스칼라 삽입
- 30. 삽입 정렬 내 구현
이것은 정확한 사본이 아니며, 변경 불가능한지도에 대한 질문입니다. 주장되는 복제본은 변경 가능하고 변경 불가능한 것입니다. 다른 질문은 * 직접 * 불변 부분에 대답하지 않습니다 (아마도 간접적으로) –