질문 역사:
SortedList 및 SortedDictionary 유형의 컬렉션은 .NET에서 키-값 쌍을 키 순서로 정렬된 방식으로 편리하게 저장하기 위해 등장했습니다. 이들은 키에 대한 빠른 접근이 중요하고 동시에 정렬 지원이 필요한 경우에 사용됩니다.
문제:
이러한 컬렉션 간의 잘못된 선택, 부적합한 유형의 키 사용(IComparable 지원 없음), 중복 키 삽입 시 행동에 대한 잘못된 기대와 관련된 흔한 오류들이 있습니다.
해결책:
Visual Basic에서는 정렬된 데이터를 저장하기 위해 SortedList(Of TKey, TValue) 및 SortedDictionary(Of TKey, TValue) 클래스를 사용합니다.
코드 예:
Dim sortedList As New SortedList(Of String, Integer)() sortedList.Add("Alex", 27) sortedList.Add("Mike", 34) Dim age As Integer = sortedList("Alex") ' 27 Dim sortedDict As New SortedDictionary(Of Integer, String)() sortedDict.Add(3, "Three") sortedDict.Add(1, "One") For Each pair In sortedDict Console.WriteLine(pair.Key & ": " & pair.Value) Next
주요 특징:
1. SortedList 또는 SortedDictionary에서 기존 요소의 키를 변경할 수 있습니까?
아니요, 기존 요소의 키를 변경할 수 없습니다. 키를 "변경"하려면 원래 쌍을 삭제하고 수정된 키로 새 쌍을 추가해야 합니다.
2. 이미 존재하는 키를 추가하려고 할 때 어떤 예외가 발생합니까?
ArgumentException이 발생합니다.
Dim sl As New SortedList(Of Integer, String)() sl.Add(1, "One") sl.Add(1, "Repeat") ' ArgumentException
3. 키에 IComparable을 구현하지 않는 타입을 사용하면 어떻게 됩니까?
컴파일러는 컬렉션을 생성하는 것을 허용하지만, 첫 번째 요소를 추가하려고 하면 InvalidOperationException이 발생합니다.
Class MyObj End Class Dim sd As New SortedDictionary(Of MyObj, String)() sd.Add(New MyObj(), "test") ' Exception
SortedList를 사용하여 식별자(userId — 키)와 나이(값)로 사용자 레지스트리를 구현했습니다. 키로 자체 객체 유형(User)을 선택했지만, 이것은 IComparable을 구현하지 않았습니다. 사용자 추가 시 예상치 못한 예외가 발생합니다.
장점:
단점:
SortedDictionary(Of Integer, User)를 사용하여 키는 비교를 지원하는 간단한 타입인 Integer(userId)입니다. 모든 것이 올바르게 작동하며 사용자 식별자에 대한 정렬이 있습니다.
장점:
단점: