반응형
데이터를 가지고 있게 할 때
찾는 값을 빨리 가져올 수 있게 하려고
Dictionary를 자주 사용하게 됩니다.
좋긴한데, 이 컬렉션을 정렬하고 싶은데 잘 안되서 막막할때가 있더라고요.
찾아보니 Dictionary값을 KeyValuePair의 형태로 List에 넣어서 정렬을 하니까 쉽게 처리가 되었습니다.
아래는 그 예시입니다.
Dictionary를 하나 선언하고, C, B, A, E, D와 순서로 데이터 값을 등록합니다.
Dictionary<string, double> dic = new Dictionary<string, double>();
dic.Add("C", 1);
dic.Add("B", 4);
dic.Add("A", 7);
dic.Add("E", 2);
dic.Add("D", 5);
값을 확인해보면 아래와 같이 들어있게되죠.
이 값을 A, B, C, D, E 순서로 정렬하고 싶은데, Dictionary는 순서를 보장해주지 않아서
이 값을 List에 넣고 정렬을 해야 합니다.
List에 값을 넣을땐 아래와 같이 선언해서 넣어주면 됩니다.
List<KeyValuePair<string, double>> list = new List<KeyValuePair<string, double>>(dic);
이제 List에 있는 값들을 정렬해야하는데, 정렬하는 많은 방법이 있겠지만 IComparer 클래스를 하나 선언해서 정렬하겠습니다.
아래처럼 Comparer 클래스를 하나 만들어 둡니다.
public class DicComparer : IComparer<KeyValuePair<string, double>>
{
public int Compare(KeyValuePair<string, double> x, KeyValuePair<string, double> y)
{
int cmp = 0;
cmp = x.Key.CompareTo(y.Key);
return cmp;
}
public DicComparer()
{
}
}
이제 List에서 아래와 같이 설정해둔 클래스를 호출해서 정렬을 하면 됩니다.
list.Sort(new DicComparer());
디버깅을 걸어서 보면 정렬된 모습을 볼 수 있습니다.
전체코드는 아래와 같습니다.
참고로 보시면 좋을 듯 하네요.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApp4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Dictionary<string, double> dic = new Dictionary<string, double>();
dic.Add("C", 1);
dic.Add("B", 4);
dic.Add("A", 7);
dic.Add("E", 2);
dic.Add("D", 5);
List<KeyValuePair<string, double>> list = new List<KeyValuePair<string, double>>(dic);
list.Sort(new DicComparer());
}
}
public class DicComparer : IComparer<KeyValuePair<string, double>>
{
public int Compare(KeyValuePair<string, double> x, KeyValuePair<string, double> y)
{
int cmp = 0;
cmp = x.Key.CompareTo(y.Key);
return cmp;
}
public DicComparer()
{
}
}
}
반응형
'C# > Common' 카테고리의 다른 글
[C#] Enum foreach - Enum(열거형) 반복문 사용법 (0) | 2018.04.05 |
---|---|
[C#] Dictionary 사용예제 (0) | 2018.04.02 |
[C#] DataTable 사용법 (0) | 2018.03.28 |
[C#] Color (0) | 2018.03.20 |
[C#] Random Class 사용 (0) | 2018.03.20 |
댓글