SortedDictionary<TKey,TValue> 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
키에 정렬된 키/값 쌍의 컬렉션을 나타냅니다.
generic <typename TKey, typename TValue>
public ref class SortedDictionary : System::Collections::Generic::ICollection<System::Collections::Generic::KeyValuePair<TKey, TValue>>, System::Collections::Generic::IDictionary<TKey, TValue>, System::Collections::Generic::IEnumerable<System::Collections::Generic::KeyValuePair<TKey, TValue>>, System::Collections::Generic::IReadOnlyCollection<System::Collections::Generic::KeyValuePair<TKey, TValue>>, System::Collections::Generic::IReadOnlyDictionary<TKey, TValue>, System::Collections::IDictionary
generic <typename TKey, typename TValue>
public ref class SortedDictionary : System::Collections::Generic::ICollection<System::Collections::Generic::KeyValuePair<TKey, TValue>>, System::Collections::Generic::IDictionary<TKey, TValue>, System::Collections::Generic::IEnumerable<System::Collections::Generic::KeyValuePair<TKey, TValue>>, System::Collections::IDictionary
public class SortedDictionary<TKey,TValue> : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.Generic.IDictionary<TKey,TValue>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.Generic.IReadOnlyCollection<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.Generic.IReadOnlyDictionary<TKey,TValue>, System.Collections.IDictionary
[System.Serializable]
public class SortedDictionary<TKey,TValue> : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.Generic.IDictionary<TKey,TValue>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.IDictionary
[System.Serializable]
public class SortedDictionary<TKey,TValue> : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.Generic.IDictionary<TKey,TValue>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.Generic.IReadOnlyCollection<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.Generic.IReadOnlyDictionary<TKey,TValue>, System.Collections.IDictionary
public class SortedDictionary<TKey,TValue> : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.Generic.IDictionary<TKey,TValue>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>, System.Collections.IDictionary
type SortedDictionary<'Key, 'Value> = class
interface ICollection<KeyValuePair<'Key, 'Value>>
interface seq<KeyValuePair<'Key, 'Value>>
interface IEnumerable
interface IDictionary<'Key, 'Value>
interface IReadOnlyCollection<KeyValuePair<'Key, 'Value>>
interface IReadOnlyDictionary<'Key, 'Value>
interface ICollection
interface IDictionary
[<System.Serializable>]
type SortedDictionary<'Key, 'Value> = class
interface IDictionary<'Key, 'Value>
interface ICollection<KeyValuePair<'Key, 'Value>>
interface seq<KeyValuePair<'Key, 'Value>>
interface IDictionary
interface ICollection
interface IEnumerable
[<System.Serializable>]
type SortedDictionary<'Key, 'Value> = class
interface IDictionary<'Key, 'Value>
interface ICollection<KeyValuePair<'Key, 'Value>>
interface seq<KeyValuePair<'Key, 'Value>>
interface IEnumerable
interface IDictionary
interface ICollection
interface IReadOnlyDictionary<'Key, 'Value>
interface IReadOnlyCollection<KeyValuePair<'Key, 'Value>>
type SortedDictionary<'Key, 'Value> = class
interface IDictionary<'Key, 'Value>
interface ICollection<KeyValuePair<'Key, 'Value>>
interface seq<KeyValuePair<'Key, 'Value>>
interface IDictionary
interface ICollection
interface IEnumerable
Public Class SortedDictionary(Of TKey, TValue)
Implements ICollection(Of KeyValuePair(Of TKey, TValue)), IDictionary, IDictionary(Of TKey, TValue), IEnumerable(Of KeyValuePair(Of TKey, TValue)), IReadOnlyCollection(Of KeyValuePair(Of TKey, TValue)), IReadOnlyDictionary(Of TKey, TValue)
Public Class SortedDictionary(Of TKey, TValue)
Implements ICollection(Of KeyValuePair(Of TKey, TValue)), IDictionary, IDictionary(Of TKey, TValue), IEnumerable(Of KeyValuePair(Of TKey, TValue))
형식 매개 변수
- TKey
사전에 있는 키의 형식입니다.
- TValue
사전에 있는 값의 형식입니다.
- 상속
-
SortedDictionary<TKey,TValue>
- 특성
- 구현
-
ICollection<KeyValuePair<TKey,TValue>> IDictionary<TKey,TValue> IEnumerable<KeyValuePair<TKey,TValue>> IEnumerable<T> IReadOnlyCollection<KeyValuePair<TKey,TValue>> IReadOnlyDictionary<TKey,TValue> ICollection IDictionary IEnumerable
예제
다음 코드 예제에서는 문자열 키를 사용하여 빈 문자열 SortedDictionary<TKey,TValue> 만들고 Add 메서드를 사용하여 일부 요소를 추가합니다. 이 예제에서는 Add 메서드가 중복 키를 추가하려고 할 때 ArgumentException throw하는 것을 보여 줍니다.
이 예제에서는 Item[] 속성(C#의 인덱서)을 사용하여 값을 검색하고 요청된 키가 없을 때 KeyNotFoundException throw되고 키와 연결된 값을 바꿀 수 있음을 보여 줍니다.
이 예제에서는 프로그램에서 사전에 없는 키 값을 자주 시도해야 하는 경우 값을 검색하는 보다 효율적인 방법으로 TryGetValue 메서드를 사용하는 방법을 보여 줍니다. ContainsKey 메서드를 사용하여 Add 메서드를 호출하기 전에 키가 있는지 여부를 테스트하는 방법을 보여 줍니다.
이 예제에서는 사전의 키와 값을 열거하는 방법과 Keys 속성과 Values 속성을 사용하여 키와 값만 열거하는 방법을 보여 있습니다.
마지막으로 이 예제에서는 Remove 메서드를 보여 줍니다.
using System;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
// Create a new sorted dictionary of strings, with string
// keys.
SortedDictionary<string, string> openWith =
new SortedDictionary<string, string>();
// Add some elements to the dictionary. There are no
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
// The Add method throws an exception if the new key is
// already in the dictionary.
try
{
openWith.Add("txt", "winword.exe");
}
catch (ArgumentException)
{
Console.WriteLine("An element with Key = \"txt\" already exists.");
}
// The Item property is another name for the indexer, so you
// can omit its name when accessing elements.
Console.WriteLine("For key = \"rtf\", value = {0}.",
openWith["rtf"]);
// The indexer can be used to change the value associated
// with a key.
openWith["rtf"] = "winword.exe";
Console.WriteLine("For key = \"rtf\", value = {0}.",
openWith["rtf"]);
// If a key does not exist, setting the indexer for that key
// adds a new key/value pair.
openWith["doc"] = "winword.exe";
// The indexer throws an exception if the requested key is
// not in the dictionary.
try
{
Console.WriteLine("For key = \"tif\", value = {0}.",
openWith["tif"]);
}
catch (KeyNotFoundException)
{
Console.WriteLine("Key = \"tif\" is not found.");
}
// When a program often has to try keys that turn out not to
// be in the dictionary, TryGetValue can be a more efficient
// way to retrieve values.
string value = "";
if (openWith.TryGetValue("tif", out value))
{
Console.WriteLine("For key = \"tif\", value = {0}.", value);
}
else
{
Console.WriteLine("Key = \"tif\" is not found.");
}
// ContainsKey can be used to test keys before inserting
// them.
if (!openWith.ContainsKey("ht"))
{
openWith.Add("ht", "hypertrm.exe");
Console.WriteLine("Value added for key = \"ht\": {0}",
openWith["ht"]);
}
// When you use foreach to enumerate dictionary elements,
// the elements are retrieved as KeyValuePair objects.
Console.WriteLine();
foreach( KeyValuePair<string, string> kvp in openWith )
{
Console.WriteLine("Key = {0}, Value = {1}",
kvp.Key, kvp.Value);
}
// To get the values alone, use the Values property.
SortedDictionary<string, string>.ValueCollection valueColl =
openWith.Values;
// The elements of the ValueCollection are strongly typed
// with the type that was specified for dictionary values.
Console.WriteLine();
foreach( string s in valueColl )
{
Console.WriteLine("Value = {0}", s);
}
// To get the keys alone, use the Keys property.
SortedDictionary<string, string>.KeyCollection keyColl =
openWith.Keys;
// The elements of the KeyCollection are strongly typed
// with the type that was specified for dictionary keys.
Console.WriteLine();
foreach( string s in keyColl )
{
Console.WriteLine("Key = {0}", s);
}
// Use the Remove method to remove a key/value pair.
Console.WriteLine("\nRemove(\"doc\")");
openWith.Remove("doc");
if (!openWith.ContainsKey("doc"))
{
Console.WriteLine("Key \"doc\" is not found.");
}
}
}
/* This code example produces the following output:
An element with Key = "txt" already exists.
For key = "rtf", value = wordpad.exe.
For key = "rtf", value = winword.exe.
Key = "tif" is not found.
Key = "tif" is not found.
Value added for key = "ht": hypertrm.exe
Key = bmp, Value = paint.exe
Key = dib, Value = paint.exe
Key = doc, Value = winword.exe
Key = ht, Value = hypertrm.exe
Key = rtf, Value = winword.exe
Key = txt, Value = notepad.exe
Value = paint.exe
Value = paint.exe
Value = winword.exe
Value = hypertrm.exe
Value = winword.exe
Value = notepad.exe
Key = bmp
Key = dib
Key = doc
Key = ht
Key = rtf
Key = txt
Remove("doc")
Key "doc" is not found.
*/
Imports System.Collections.Generic
Public Class Example
Public Shared Sub Main()
' Create a new sorted dictionary of strings, with string
' keys.
Dim openWith As New SortedDictionary(Of String, String)
' Add some elements to the dictionary. There are no
' duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe")
openWith.Add("bmp", "paint.exe")
openWith.Add("dib", "paint.exe")
openWith.Add("rtf", "wordpad.exe")
' The Add method throws an exception if the new key is
' already in the dictionary.
Try
openWith.Add("txt", "winword.exe")
Catch
Console.WriteLine("An element with Key = ""txt"" already exists.")
End Try
' The Item property is the default property, so you
' can omit its name when accessing elements.
Console.WriteLine("For key = ""rtf"", value = {0}.", _
openWith("rtf"))
' The default Item property can be used to change the value
' associated with a key.
openWith("rtf") = "winword.exe"
Console.WriteLine("For key = ""rtf"", value = {0}.", _
openWith("rtf"))
' If a key does not exist, setting the default Item property
' for that key adds a new key/value pair.
openWith("doc") = "winword.exe"
' The default Item property throws an exception if the requested
' key is not in the dictionary.
Try
Console.WriteLine("For key = ""tif"", value = {0}.", _
openWith("tif"))
Catch
Console.WriteLine("Key = ""tif"" is not found.")
End Try
' When a program often has to try keys that turn out not to
' be in the dictionary, TryGetValue can be a more efficient
' way to retrieve values.
Dim value As String = ""
If openWith.TryGetValue("tif", value) Then
Console.WriteLine("For key = ""tif"", value = {0}.", value)
Else
Console.WriteLine("Key = ""tif"" is not found.")
End If
' ContainsKey can be used to test keys before inserting
' them.
If Not openWith.ContainsKey("ht") Then
openWith.Add("ht", "hypertrm.exe")
Console.WriteLine("Value added for key = ""ht"": {0}", _
openWith("ht"))
End If
' When you use foreach to enumerate dictionary elements,
' the elements are retrieved as KeyValuePair objects.
Console.WriteLine()
For Each kvp As KeyValuePair(Of String, String) In openWith
Console.WriteLine("Key = {0}, Value = {1}", _
kvp.Key, kvp.Value)
Next kvp
' To get the values alone, use the Values property.
Dim valueColl _
As SortedDictionary(Of String, String).ValueCollection = _
openWith.Values
' The elements of the ValueCollection are strongly typed
' with the type that was specified for dictionary values.
Console.WriteLine()
For Each s As String In valueColl
Console.WriteLine("Value = {0}", s)
Next s
' To get the keys alone, use the Keys property.
Dim keyColl _
As SortedDictionary(Of String, String).KeyCollection = _
openWith.Keys
' The elements of the KeyCollection are strongly typed
' with the type that was specified for dictionary keys.
Console.WriteLine()
For Each s As String In keyColl
Console.WriteLine("Key = {0}", s)
Next s
' Use the Remove method to remove a key/value pair.
Console.WriteLine(vbLf + "Remove(""doc"")")
openWith.Remove("doc")
If Not openWith.ContainsKey("doc") Then
Console.WriteLine("Key ""doc"" is not found.")
End If
End Sub
End Class
' This code example produces the following output:
'
'An element with Key = "txt" already exists.
'For key = "rtf", value = wordpad.exe.
'For key = "rtf", value = winword.exe.
'Key = "tif" is not found.
'Key = "tif" is not found.
'Value added for key = "ht": hypertrm.exe
'
'Key = bmp, Value = paint.exe
'Key = dib, Value = paint.exe
'Key = doc, Value = winword.exe
'Key = ht, Value = hypertrm.exe
'Key = rtf, Value = winword.exe
'Key = txt, Value = notepad.exe
'
'Value = paint.exe
'Value = paint.exe
'Value = winword.exe
'Value = hypertrm.exe
'Value = winword.exe
'Value = notepad.exe
'
'Key = bmp
'Key = dib
'Key = doc
'Key = ht
'Key = rtf
'Key = txt
'
'Remove("doc")
'Key "doc" is not found.
'
설명
SortedDictionary<TKey,TValue> 제네릭 클래스는 O(log n) 검색이 있는 이진 검색 트리입니다. 여기서 n은 사전의 요소 수입니다. 이 점에서 SortedList<TKey,TValue> 제네릭 클래스와 비슷합니다. 두 클래스에는 유사한 개체 모델이 있으며 둘 다 O(log n) 검색이 있습니다. 두 클래스가 다른 점은 메모리 사용 및 삽입 및 제거 속도입니다.
SortedList<TKey,TValue> SortedDictionary<TKey,TValue>보다 적은 메모리를 사용합니다.
SortedDictionary<TKey,TValue> 정렬되지 않은 데이터에 대한 삽입 및 제거 작업이 더 빨라집니다. O(log n)는 SortedList<TKey,TValue>O(n)와는 대조적입니다.
정렬된 데이터에서 목록이 한꺼번에 채워지면 SortedList<TKey,TValue>SortedDictionary<TKey,TValue>.
각 키/값 쌍은 KeyValuePair<TKey,TValue> 구조 또는 비제네릭 IDictionary 인터페이스를 통해 DictionaryEntry 검색할 수 있습니다.
키는 SortedDictionary<TKey,TValue>키로 사용되는 한 변경할 수 없어야 합니다.
SortedDictionary<TKey,TValue> 모든 키는 고유해야 합니다. 키는 null
수 없지만 TValue
값 형식이 참조 형식인 경우 값이 될 수 있습니다.
SortedDictionary<TKey,TValue> 키 비교를 수행하려면 비교자 구현이 필요합니다.
comparer
매개 변수를 허용하는 생성자를 사용하여 IComparer<T> 제네릭 인터페이스의 구현을 지정할 수 있습니다. 구현을 지정하지 않으면 기본 제네릭 비교자 Comparer<T>.Default 사용됩니다. 형식 TKey
System.IComparable<T> 제네릭 인터페이스를 구현하는 경우 기본 비교자는 해당 구현을 사용합니다.
C# 언어의 foreach
문(C++의for each
Visual Basic의 For Each
)은 컬렉션에 있는 요소 형식의 개체를 반환합니다.
SortedDictionary<TKey,TValue> 각 요소는 키/값 쌍이므로 요소 형식은 키의 형식이나 값의 형식이 아닙니다. 대신 요소 형식이 KeyValuePair<TKey,TValue>. 다음 코드에서는 C#, C++, Visual Basic 구문을 보여 있습니다.
for each(KeyValuePair<String^, String^> kvp in myDictionary)
{
Console::WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}
foreach( KeyValuePair<string, string> kvp in myDictionary )
{
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}
For Each kvp As KeyValuePair(Of String, String) In myDictionary
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value)
Next kvp
foreach
문은 열거자 주위의 래퍼로, 컬렉션에 쓰지 않고 컬렉션에서만 읽을 수 있습니다.
생성자
SortedDictionary<TKey,TValue>() |
비어 있고 키 형식에 대한 기본 IComparer<T> 구현을 사용하는 SortedDictionary<TKey,TValue> 클래스의 새 인스턴스를 초기화합니다. |
SortedDictionary<TKey,TValue>(IComparer<TKey>) |
비어 있고 지정된 IComparer<T> 구현을 사용하여 키를 비교하는 SortedDictionary<TKey,TValue> 클래스의 새 인스턴스를 초기화합니다. |
SortedDictionary<TKey,TValue>(IDictionary<TKey,TValue>) |
지정된 IDictionary<TKey,TValue> 복사한 요소를 포함하고 키 형식에 대한 기본 IComparer<T> 구현을 사용하는 SortedDictionary<TKey,TValue> 클래스의 새 인스턴스를 초기화합니다. |
SortedDictionary<TKey,TValue>(IDictionary<TKey,TValue>, IComparer<TKey>) |
지정된 IDictionary<TKey,TValue> 복사한 요소를 포함하고 지정된 IComparer<T> 구현을 사용하여 키를 비교하는 SortedDictionary<TKey,TValue> 클래스의 새 인스턴스를 초기화합니다. |
속성
Comparer |
SortedDictionary<TKey,TValue>요소의 순서를 지정하는 데 사용되는 IComparer<T> 가져옵니다. |
Count |
SortedDictionary<TKey,TValue>포함된 키/값 쌍의 수를 가져옵니다. |
Item[TKey] |
지정된 키와 연결된 값을 가져오거나 설정합니다. |
Keys |
SortedDictionary<TKey,TValue>키를 포함하는 컬렉션을 가져옵니다. |
Values |
SortedDictionary<TKey,TValue>값을 포함하는 컬렉션을 가져옵니다. |
메서드
Add(TKey, TValue) |
지정된 키와 값이 있는 요소를 SortedDictionary<TKey,TValue>추가합니다. |
Clear() |
SortedDictionary<TKey,TValue>모든 요소를 제거합니다. |
ContainsKey(TKey) |
SortedDictionary<TKey,TValue> 지정된 키를 가진 요소가 포함되어 있는지 여부를 확인합니다. |
ContainsValue(TValue) |
SortedDictionary<TKey,TValue> 지정된 값을 가진 요소가 포함되어 있는지 여부를 확인합니다. |
CopyTo(KeyValuePair<TKey,TValue>[], Int32) |
지정된 인덱스에서 시작하여 SortedDictionary<TKey,TValue> 요소를 지정된 KeyValuePair<TKey,TValue> 구조 배열에 복사합니다. |
Equals(Object) |
지정된 개체가 현재 개체와 같은지 여부를 확인합니다. (다음에서 상속됨 Object) |
GetEnumerator() |
SortedDictionary<TKey,TValue>반복하는 열거자를 반환합니다. |
GetHashCode() |
기본 해시 함수로 사용됩니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type 가져옵니다. (다음에서 상속됨 Object) |
MemberwiseClone() |
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
Remove(TKey) |
지정된 키를 가진 요소를 SortedDictionary<TKey,TValue>제거합니다. |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
TryGetValue(TKey, TValue) |
지정된 키와 연결된 값을 가져옵니다. |
명시적 인터페이스 구현
확장 메서드
적용 대상
스레드 보안
이 형식의 공용 정적(Visual Basic의Shared
) 멤버는 스레드로부터 안전합니다. 모든 인스턴스 멤버는 스레드로부터 안전하게 보호되지 않습니다.
컬렉션이 수정되지 않는 한 SortedDictionary<TKey,TValue> 여러 판독기를 동시에 지원할 수 있습니다. 그럼에도 불구하고 컬렉션을 열거하는 것은 본질적으로 스레드로부터 안전한 프로시저가 아닙니다. 열거 중 스레드 안전을 보장하기 위해 전체 열거형 중에 컬렉션을 잠글 수 있습니다. 읽기 및 쓰기를 위해 여러 스레드에서 컬렉션에 액세스할 수 있도록 하려면 고유한 동기화를 구현해야 합니다.
추가 정보
.NET