C# 예제 공부일기
-
SortedList와 Sorted<TKey, TValue>C# 예제 공부일기 2020. 7. 21. 20:48
Sorted 컬렉션은 키의 오름차순으로 키-값 쌍을 저장한다. 내부적으로 SortedList는 키와 값을 저장하는 두 개의 object[] 배열을 유지한다. 새로운 값이 들어오면 키를 이진탐색하여 적절한 인덱스를 찾고 그 곳에 키 - 값 쌍을 저장한다. 앞전 예제인 Dictionary를 정렬한 느낌인듯 하다. C#은 다른 컬렉션과 마찬가지로 제네릭과 제네릭이 아닌 것 두개를 제공한다. SortedList는 다음과 같이 사용한다. Key는 int , Value는 string이다. SortedList mySortedList = new SortedList(); class Program { static void Main(string[] args) { SortedList s1 = new SortedList(); ..
-
Hashtable과 Dictionary<TKey, TValue>C# 예제 공부일기 2020. 7. 21. 20:21
Hashtable이나 Dictionary 객체는 사전과 같이 "키" 와 "값" 쌍으로 데이터를 저장한다. 0,1,2 같은 인덱스가 아니고 키에 의해 값을 찾아준다. Hashtable이나 Dictionary에서는 모든 값이 키가 될 수 있다. 하지만 Hashtable은 non-generic 컬렉션이고 Dictionary는 제네릭 컬렉션이다. 사용법은 거의 동일하다. Hashtable과 Dictionary는 키를 인덱스로 값을 찾아주기 때문에 탐색속도가 O(1) 이다. 이 작업을 해싱이라고 한다. Hashtable이라는 이름은 Hashing에서 유래했다. 사용시 주의할 점 - 키는 중복될 수 없다. 중복된 키로 저장하면 ArgumentException이 발생한다. - 없는키로 Hashtable에 접근하면 K..
-
Stack<T> 와 Polish 계산기C# 예제 공부일기 2020. 7. 21. 20:08
큐와 반대로 스택은 나중에 저장된 자료가 먼저 처리될 때 사용하는 자료구조이다. 나중에 들어온 자료가 먼저 처리되므로 후입선출(LIFO, "Last-In First-Out") 이라고도 한다. 스택은 입력과 출력이 한 방향에서만 이루어진다. 스택에 자료를 넣는 것을 Push, 꺼내는 것을 Pop이라고 한다. 큐와 마찬가지로 .NET 컬렉션은 Stack과 Stack를 제공한다. 제네릭과 제네릭 아닌 것의 차이니 제네릭 쓰는 게 더 나을 것 같다. Polish표기법을 사용하는 4칙 연산 계산기 Polish 표기법은 피연산자 뒤에 연산자를 쓰게 된다. 1+2 => 1 2 + 로 표기한다. 이렇게 되면 수식에 괄호가 없어도 우선순위를 처리할 수 있게 된다. 예를들어 (10-20)*3 => 10 20 - 3 * 가..
-
Queue<T> 컬렉션의 사용 방법C# 예제 공부일기 2020. 7. 21. 19:32
극장이나 음식점에서 순서를 기다리면서 줄을 서면 먼저 온 사람이 먼저 들어간다. 이와 같이 큐는 자료가 저장된 순서대로 선착순 처리할 때 유용한 자료구조이다. 먼저 들어간 자료가 먼저 처리되므로 선입선출(FIFO, First-In-First-Out)이라고도 한다. **배열이나 리스트가 인덱스로 특정 위치의 자료에 자유롭게 접근하는 반면에, Queue는 입력은 오직 뒤에서, 출력은 앞에서만 이루어진다. Queue에 자료를 넣는 것을 Enqueue, 꺼내는 것을 Dequeue라고 한다. .NET 컬렉션은 제네릭 Queue와 재네릭이 아닌 Queue를 제공한다. 둘중 Queue의 사용을 권장한다고 한다. static void Main(string[] args) { Queue que = new Queue(); ..
-
IComparable 인터페이스를 이용한 객체의 정렬C# 예제 공부일기 2020. 7. 21. 19:06
C#의 컬렉션은 대부분 Sort메소드를 제공하는데 IComparable 인터페이스를 구현해야 정상적으로 동작한다. IComparable 인터페이스는 자신과 비교할 매개변수를 비교하여 결과를 반환하는 CompareTo메소드를 만들도록 약속하고 있다. 매개변수 형식이 object 형식으로 되어 있으므로 프로그램의 목적에 맞게 캐스팅하여 처리해야 한다. interface IComparable { int ComapreTo(object obc); } C#의 System에 정의되어 있는 int, double, string 등의 기본 형식들은 IComparable 인터페이스를 기반으로 정의되어 있어서 이들 기본 형식을 보관한 컬렉션은 Sort메소드를 이용하여 정렬할 수 있다. 우리가 사용하는 클래스에 ICompara..
-
두 개의 배열을 쌍으로 정렬C# 예제 공부일기 2020. 7. 20. 20:53
Array 클래스의 Sort() 메소드는 다양한 방법으로 중복되어 있습니다. 이중 두개의 배열을 쌍으로 정렬할 때 사용할 수 있는 메소드는 다음과 같다. 모두 public static void 타입의 정적 메소드이다. Sort(Array, Array) // 앞에 있는 배열을 기준으로 두개의 배열을 오름차순 정렬한다. 정렬 기준은 첫 번째 배열의 값이고 두 번째 배열은 첫 번째 배열의 순서에 따라 결정된다. Sort(Array, Array, IComparer) //위의 방식과 같이 정렬하지만 그 기준이 IComparer이다 Sort(Array, Array ,Int32, Int32) Sort(Array, Array ,Int32, Int32,IComparer) //위의 두 방식은 배열의 전체가 아니고 일부를 ..
-
배열을 내림차순으로 정렬하는 방법C# 예제 공부일기 2020. 7. 20. 20:26
배열을 정렬할 때는 Array.Sort() 메서드를 사용한다. Sort()메소드는 디폴트로 오름차순으로 정렬한다. 내림차순으로 정렬할 때는 Sort한 뒤에 Array.Reverse()를 사용한다. 첫 번째 방법 int[] arr = {12,32,43,24,8}; Array.Sort(arr); Array.Reverse(arr); 두 번째 방법 public static void Sort(Array); //오름차순 정렬 public static void Sort(Array, Int32, Int32) //인덱스와 개수에 의한 정렬 public static void Sort(Array, IComparer) //IComparer의 인터페이스를 구현하여 이 규칙에 따라 정렬하는 것이다. public class MyC..
-
List<T>와 배열의 정렬C# 예제 공부일기 2020. 7. 20. 19:58
List 와 Array는 객체 생성 방법이 다르다. List lstNames=new List(); -> 리스트의 선언 string[] arrName = new string[100]; -> 배열의 선언 lstNames.Sort() -> 리스트의 정렬 Array.Sort(arrName); -> 배열의 정렬(array 클래스의 Sort 메소드는 static으로 정의되어 있기 때문에 다음과 같이 사용) public class Test { static void Main(string[] args) { List lstNames = new List(); lstNames.Add("dog"); lstNames.Add("cow"); lstNames.Add("rabit"); lstNames.Add("goat"); lstNam..