IDictionary<string, int> 부분에서 int값을 정렬시키는 방법 문의
-
2012년 2월 17일 금요일 오전 11:59
public IDictionary<string, int> DIC{get;set;}
여기에 값을 입력한 후,
[0] Work,0
[1] New,1
[2] Pass,2
...
[50] SSS,50
와 같다고 하고
후에 이렇게 변경시키게 된다면,
[0] Work,1
[1] New,2
[2] Pass,0
...
[50] SSS,50
IDictionary<string, int> 부분에서 int값을 정렬시키는 방법이 있는지요?
만약 정렬시키게 된다면,
[0] Pass,0
[1] Work,1
[2] New,2
...
[50] SSS,50
와 같이 나와야 합니다.
모든 응답
-
2012년 2월 17일 금요일 오후 4:20
공식적으로 그런 방법은 제공되지 않습니다.
물론, 만들면 되겠지만 ... Dictionary 의 특성상 그 자체로 정렬 시킬 수 있는 자료 구조는 아니기 때문에 한번 꺼내서 정렬시킨 후 다시 넣어주어야 합니다.대략 만들어 보면... 다음과 같은 식으로 구현될 수 있습니다.
public class TupleComparer : IComparer<Tuple<string, int>>
{
public int Compare(Tuple<string, int> x, Tuple<string, int> y)
{
return x.Item2.CompareTo(y.Item2);
}
}static void Main(string[] args)
{
Dictionary<string, int> dic = new Dictionary<string,int>();
dic.Add("Work", 0);
dic.Add("New", 1);
dic.Add("Pass", 2);dic["Work"] = 1;
dic["New"] = 2;
dic["Pass"] = 0;Tuple<string, int> [] tuples = new Tuple<string, int>[dic.Count];
int i = 0;
foreach (var item in dic)
{
tuples[i] = new Tuple<string, int>(item.Key, item.Value);
i++;
}Array.Sort(tuples, new TupleComparer());
dic.Clear();foreach (var item in tuples)
{
dic.Add(item.Item1, item.Item2);
}
}- 답변으로 표시됨 Jina LeeModerator 2012년 4월 23일 월요일 오전 1:09
-
2012년 2월 20일 월요일 오전 1:57중재자
안녕하십니까? code1004 님,
Microsoft MSDN의 Forum 사이트를 방문해 주셔서 감사합니다.
문의 하신 ”IDictionary<string,int> 부분에서 int값을 정렬시키는 방법 문의” 에 대해 답변드리겠습니다.
제 생각에는 현재 Dictionary 자체 int값으로 정열하는 것에 대한 기능을 제공하고있지 않습니다.
하지만 아래와같은 코드를 이용해보시길 바랍니다.
Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("A", 3);
dict.Add("B", 2);
dict.Add("C", 1);
List<KeyValuePair<string, int>> sorted = (from kv in dict orderby kv.Value select kv).ToList();
foreach (KeyValuePair<string, int> kv in sorted)
{
Console.WriteLine("{0}={1}", kv.Key, kv.Value);
// Prints:
// C=1
// B=2
// A=3
}혹시 제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.
제시해 드린 답변이 도움이 되었기를 바랍니다.
답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다. 하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.
-
2012년 3월 27일 화요일 오전 1:59
SortedList 를 써보시기 바랍니다. ㅎ- 답변으로 표시됨 Jina LeeModerator 2012년 4월 23일 월요일 오전 1:09
-
2012년 3월 27일 화요일 오전 2:07
SortedList 가 답이 될까요? ^^
위에서 dictionary 에 보관되는 항목의 형식이 <string, int> 인데요. SortedList 는 Key 에 해당하는 것만 정렬을 합니다. 즉, string 이 정렬되기 때문에 질문자가 의도한 int 정렬과 상관이 없습니다.
혹시 value를 기준으로 하는 SortedList 의 응용이 있는 건가요? ^^

