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 |
댓글