본문 바로가기
C#/Common

[C#] Dictionary 사용예제

by 샤나엘 2018. 4. 2.
반응형

C# Dictionary 사용에 대한 예제입니다.

 

Dictionary<TKey, TValue> 는 Key와 Value 가 한 쌍으로 이루어져 있습니다.

Key를 통해서 Value를 검색하기 때문에 빠르게 값을 찾아 올 수 있고,

Key를 중복해서 저장할 수 없기 때문에 유일성을 가지는 Collection 구조를 만들어 사용할 수 있습니다.

 

아래 시나리오는 APPLE, BANANA, ORAGNE를 1월부터 12월까지 판매한 수량이 대한 Data를 바탕 한해동안 판매된 누적수량을 집계하는 부분을 Dictionary를 사용해서 계산하는 예제입니다.


 

Dictionary<string, int> 로 선언하고

Key에는 PRODUCT ( APPLE, BANANA, ORANGE ) 값이 들어가고 Value에는 누적 판매수량이 집계됩니다.

 

[시나리오 설명]

Data : 1월부터 12월까지 제품 판매 수량에 대한 Data입니다.

Result : 제품별 누적 판매 수량을 집계한 결과 Data입니다.

     이 부분을 Dictionary를 사용해서 계산합니다.

 

 

 

[코드설명]

CreateData() : APPLE, BANANA, ORANGE 제품에 대해서 1월 ~ 12월 까지 판매수량을 Random 함수를 사용해서 Data를 생성하는 부분입니다.

 

CreateResult() : CreateData()에서 만들어진 Data를 바탕으로 Dictionary를 사용해서 APPLE, BANANA, ORANGE에 대해서 누적판매수량을 집계하는 부분입니다.

 

 

   
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Dictionary
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dt = CreateData();

            this.gridData.DataSource = dt;

            DataTable resultDT = CreateResult(dt);

            this.gridResult.DataSource = resultDT;
        }

        private DataTable CreateResult(DataTable dt)
        {
            DataTable resultDt = new DataTable();

            DataColumn prodColumn = new DataColumn("PRODUCT", typeof(string));
            DataColumn qtyColumn = new DataColumn("QTY", typeof(int));

            resultDt.Columns.Add(prodColumn);
            resultDt.Columns.Add(qtyColumn);

            Dictionary result = new Dictionary();
            foreach (DataRow row in dt.Rows)
            {
                string product = row["PRODUCT"].ToString();
                int qty = (int)row["QTY"];

                if (result.ContainsKey(product) == false)//이미 저장된 Key값이 있는지 확인
                    result.Add(product, 0);

                result[product] += qty;//해당 Key 값에 Value 값 누적
            }

            foreach (KeyValuePair info in result)
            {
                DataRow newRow = resultDt.NewRow();

                newRow[prodColumn] = info.Key;
                newRow[qtyColumn] = info.Value;

                resultDt.Rows.Add(newRow);
            }

            return resultDt;
        }

        private DataTable CreateData()
        {
            DataTable dt = new DataTable();

            DataColumn prodColumn = new DataColumn("PRODUCT", typeof(string));
            DataColumn qtyColumn = new DataColumn("QTY", typeof(int));
            DataColumn monthColumn = new DataColumn("MONTH", typeof(int));

            dt.Columns.Add(prodColumn);
            dt.Columns.Add(qtyColumn);
            dt.Columns.Add(monthColumn);

            List prodList = new List();

            prodList.Add("APPLE");
            prodList.Add("BANANA");
            prodList.Add("ORANGE");

            Random r = new Random();
            for (int i = 1; i <= 12; i++)
            {
                foreach (string prod in prodList)
                {
                    DataRow newRow = dt.NewRow();
                    newRow[prodColumn] = prod;
                    newRow[qtyColumn] = r.Next(0, 101);
                    newRow[monthColumn] = i;
                    dt.Rows.Add(newRow);
                }
            }

            return dt;
        }
    }
}

 

 

반응형

'C# > Common' 카테고리의 다른 글

C# Dictionary sort 정렬하는 방법  (0) 2021.06.07
[C#] Enum foreach - Enum(열거형) 반복문 사용법  (0) 2018.04.05
[C#] DataTable 사용법  (0) 2018.03.28
[C#] Color  (0) 2018.03.20
[C#] Random Class 사용  (0) 2018.03.20

댓글