사용자 정의 클래스를 Dictionary의 Key로 사용하기 코드

C#


using System;
using 
System.Collections.Generic;
using 
System.Text;

namespace 
ConsoleApplication6
{
    
class Item
    {
        
public DateTime DateTimeField;
        public string 
StringField;
        public int 
IntField;

        public 
Item(DateTime d, string s, int i)
        {
            DateTimeField 
d;
            
StringField s;
            
IntField i;
        
}
    }

    
class ItemEqualityComparer : IEqualityComparer<Item>
    {
        
#region IEqualityComparer<Item> 멤버

        
public bool Equals(Item x, Item y)
        {
            
return x.DateTimeField.Equals(y.DateTimeField) &&
                   x.StringField.Equals(y.StringField) &&
                   x.IntField.Equals(y.IntField)
;
        
}

        
public int GetHashCode(Item obj)
        {
            
return obj.DateTimeField.GetHashCode() * obj.StringField.GetHashCode() * obj.IntField.GetHashCode();
        
}

        
#endregion
    
}

    
class Program
    {
        
static void Main(string[] args)
        {
            IDictionary<Item, 
int> stats = new Dictionary<Item, int>(new ItemEqualityComparer());

            
stats[new Item(new DateTime(202035), "Qoo"10)] 1;
            
stats[new Item(new DateTime(202036), "Qoo"10)] 2;
            
stats[new Item(new DateTime(202037), "Qoo"13)] 3;
            
stats[new Item(new DateTime(202038), "Qoo"10)] 4;
            
stats[new Item(new DateTime(202038), "Navi"10)] 5;

            
Print(stats);

            
stats[new Item(new DateTime(202038), "Navi"10)] +100;

            
Print(stats);
        
}

        
static void Print(IDictionary<Item, int> stats)
        {
            
foreach (KeyValuePair<Item, int> pair in stats)
                Console.WriteLine(
                    pair.Key.DateTimeField.ToString() + 
" " + pair.Key.StringField + " " 
                    pair.Key.IntField.ToString() + 
" : " + pair.Value);
            
Console.WriteLine("----");
        
}
    }
}

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://www.xeraph.com/tb/3671172 [도움말]

덧글

  • merius 2007/08/11 02:13 # 삭제 답글

    C#은 멤버 함수 첫글자를 대문자로 하나보네...
댓글 입력 영역