[C#] Collections (3)
Programming/.NET Programming 2009. 6. 2. 17:06
Collections 용어 정리 |
3. List : 사용법은 1차원 배열과 같음, 6. Hash : 넓은 범위의 것을 좁게 접근, 인덱스를 가지고 있음.
|
List를 Stack과 Queue처럼 사용하는 방법 예제 |
using System; using System.Collections; // List를 구현하기 위해 추가적으로 필요한 namespace using System.Collections.Generic; // List를 구현하기 위해 추가적으로 필요한 namespace { class Program { static void Main(string[] args) { List<int> Stack = new List<int>(); // Stack용 List생성 List<int> Queue = new List<int>(); // Queue용 List생성 for (int i = 0; i < 10; i++) { Stack.Add(i); Queue.Add(i); } Console.WriteLine(" Stack Queue"); while (Stack.Count != 0) { Console.WriteLine("\t" + Stack[Stack.Count - 1] + "\t" + Queue[0]); // Stack처럼 사용, Stack.Count - 1는 배열의 마지막 인덱스 } } } }
|
List Sorting 예제 |
using System; using System.Collections; // List를 구현하기 위해 추가적으로 필요한 namespace using System.Collections.Generic; // List를 구현하기 위해 추가적으로 필요한 namespace namespace List { class Program { static void Main(string[] args) { List <int> list = new List<int>(); // List 생성 list.Add(-1); // Data 추가 list.Add(100); list.Add(5); list.Add(3); list.Add(40); Console.WriteLine("Not Sorted..."); for (int i = 0; i < list.Count; i++) Console.WriteLine(list[i]); // Sorting되기 전 Data 출력 list.Sort(); // Sorting Console.WriteLine("\nSorted..."); for(int i = 0 ; i < list.Count ; i++) Console.WriteLine(list[i]); // Sorting된 Data 출력 // int, char,string 등 다양한 자료형을 Sorting 할 수 있음 } } } |
List Sorting이 불가능한 경우 예제 <IComparer의 필요성) |
using System; using System.Collections; // List를 구현하기 위해 추가적으로 필요한 namespace using System.Collections.Generic; // List를 구현하기 위해 추가적으로 필요한 namespace class Program { static void Main(string[] args) { List<A> list = new List<A>(); list.Add(new A(1, 1)); list.Add(new A(-5, 3)); list.Add(new A(1, 9)); list.Add(new A(5, 7)); list.Add(new A(7, 10)); list.Sort(); // 비교가 불가능하기 때문에 Runtime Error 발생! } } class A { public int a; public int b; public A(int a, int b) { this.a = a; this.b = b; } }
|
IComparer 사용하여 문제를 해결한 예제 |
using System; using System.Collections; // List를 구현하기 위해 추가적으로 필요한 namespace using System.Collections.Generic; // List를 구현하기 위해 추가적으로 필요한 namespace namespace Comparer { class Program { public static void Main(string[] args) { List<A> list = new List<A>(); list.Add(new A(1, 1)); list.Add(new A(-5, 3)); list.Add(new A(1, 9)); list.Add(new A(5, 7)); list.Add(new A(7, 10)); list.Sort(new CompareA()); for (int i = 0; i < list.Count; i++) Console.WriteLine(list[i].b); } } class A { public int a; public int b; public A(int a, int b) { this.a = a; this.b = b; } } // 방법1 : 파라미터 형을 명시(List에서 사용) class CompareA : IComparer<A> { int IComparer<A>.Compare(A x, A y) { return x.b.CompareTo(y.b); } } // 방법2 : 파라미터 형을 명시하지 않음(Array List에서 사용) class CompareA2 : IComparer { int IComparer.Compare(object x, object y) { A class1 = (A)x; A class2 = (A)y; return class1.b.CompareTo(class2.b); } } } |
'Programming > .NET Programming' 카테고리의 다른 글
[C#] Collections (2) (0) | 2009.09.15 |
---|---|
[C#] Collections (1) (0) | 2009.06.02 |
[C#] Enum과 배열 (0) | 2009.05.31 |
[C#] this와 상속 (0) | 2009.05.31 |
[C#] 오버로딩과 오버라이딩 (0) | 2009.05.31 |