Wanna be Brilliant Full-Stack Developer

C# WINFORMS 자료구조 #2 List, HashTable, Dictionary 본문

Some Memos/C#

C# WINFORMS 자료구조 #2 List, HashTable, Dictionary

Flashpacker 2023. 4. 26. 10:52

 ArrayList와 List의 차이점이 Data Type을 선언한다는 점인데

 

HashTable과 Dictionary의 경우도 동일하게 같은 자료구조 형태를 띄고 있지만 Data Type을 선언한다는 차이가 있다.

 

왠만하면 List와 Dictionary를 많이 쓴다! 

List를 많이 쓴다.  

이거를 보면 foreach문을 돌면서 리스트에 있는걸 하나 빼면서 리스트에 있는게

cake이면 증가 시키고 다 foreach문을 다 돌고나면 각각 몇개인지 나오게 될것이다.

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace _21_List
{
    public partial class Form1 : Form
    {
        List<string> _strList = new List<string>();  // List의 경우 Type을 선언 하고 사용
        
        ArrayList _arList = new ArrayList();
 
        public Form1()
        {
            InitializeComponent();
 
            dgViewList.Columns.Add("dgValue", "Value");  // Column 추가
        }
 
        private void pbox_Click(object sender, EventArgs e)
        {
            PictureBox pbox = sender as PictureBox;
 
            string strSelectText = string.Empty;
 
            switch (pbox.Name)
            {
                case "pbox1":
                    strSelectText = "cake";
                    break;
                case "pbox2":
                    strSelectText = "burger";
                    break;
                case "pbox3":
                    strSelectText = "pizza";
                    break;
                case "pbox4":
                    strSelectText = "ice";
                    break;
            }
 
            _strList.Add(strSelectText);
 
            //_arList.Add(strSelectText);
            //_arList.Add(1);
 
            fUIDisplay();
 
            fDataGridViewDisplay();
        }
        
        private void fUIDisplay()
        {
            int iCake = 0;
            int iBurger = 0;
            int iPizza = 0;
            int iIce = 0;
 
            foreach (string oitem in _strList)
            {
                switch (oitem)
                {
                    case "cake":
                        iCake++;
                        break;
                    case "burger":
                        iBurger++;
                        break;
                    case "pizza":
                        iPizza++;
                        break;
                    case "ice":
                        iIce++;
                        break;
                }
            }
 
            lblPick1.Text = iCake.ToString();
            lblPick2.Text = iBurger.ToString();
            lblPick3.Text = iPizza.ToString();
            lblPick4.Text = iIce.ToString();
 
            lblTotalCount.Text = _strList.Count.ToString();
        }
 
 
        private void fDataGridViewDisplay()
        {
            //dgViewList.DataSource = _strList.Select(x => new { Value = x }).ToList();
 
            dgViewList.Rows.Clear();
 
            foreach (string oitem in _strList)
            {
                dgViewList.Rows.Add(oitem);
            }
 
            foreach (DataGridViewRow oRow in dgViewList.Rows)
            {
                oRow.HeaderCell.Value = oRow.Index.ToString();
            }
 
            dgViewList.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
        }
 
    }
}

Dictionary는 앞에 값이 key값이고 뒤에값이 Value값이다. Key를 향한 데이터형, value를 향한 데이터형 선언을 해주고

사용해주게 되어있다. 그리하여 앞에서 했던 List의 장점과 비슷하다.

Key값 같은경우에는 유니크해야한다. 

 

Dictionary와 HashTable의 차이

DataTable과 DataSet의 차이가 먼지 많이 물어본다!

 

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

namespace _21_List
{
    public partial class Form1 : Form
    {
        enum enBossName
        {
            보검,
            신혜,
            해인,
            보영,
        }

        enum enClassName
        {
            진,
            정국,
            RM,
            지민,
            제이홉,
            뷔,
            슈가,

            은비,
            사쿠라,
            혜원,
            예나,
            채연,
            채원,
            민주,
            히토미,
            유리,
            유진,
            원영,
            나코,
        }

        List<string> _strList = new List<string>();  // List의 경우 Type을 선언 하고 사용
        ArrayList _arList = new ArrayList();

        int _iPlayerCount = 0;

        Hashtable _ht = new Hashtable();
        Dictionary<string, string> _dic = new Dictionary<string, string>();

        public Form1()
        {
            InitializeComponent();


            //dgViewList.Columns.Add("dgKey", "Key");  // Column 추가
            //dgViewList.Columns.Add("dgValue", "Value");  // Column 추가
        }

        private void pbox_Click(object sender, EventArgs e)
        {
            PictureBox pbox = sender as PictureBox;

            string strSelectText = string.Empty;

            switch (pbox.Name)
            {
                case "pbox1":
                    strSelectText = enBossName.보검.ToString();
                    break;
                case "pbox2":
                    strSelectText = enBossName.신혜.ToString();
                    break;
                case "pbox3":
                    strSelectText = enBossName.해인.ToString();
                    break;
                case "pbox4":
                    strSelectText = enBossName.보영.ToString();
                    break;
            }

            int iTotalCount = Enum.GetValues(typeof(enClassName)).Length;

            if (iTotalCount > _iPlayerCount)
            {
                enClassName enName = (enClassName)_iPlayerCount;

                _dic.Add(enName.ToString(), strSelectText);

                fUIDisplay(iTotalCount, enName.ToString());
                fDataGridViewDisplay();

                _iPlayerCount++;
            }
            else
            {
                lblPlayerName.Text = "투표를 완료 하였습니다.";
            }

        }

        bool _click = false;

        private void fUIDisplay(int iTotalCount, string strPlayerName)
        {
            int i보검 = 0;
            int i신혜 = 0;
            int i해인 = 0;
            int i보영 = 0;

            foreach (string oitem in _dic.Values)
            {
                // string 값을 enum으로 형변환 하는 부분

                switch (oitem)
                {
                    case "보검":
                        i보검++;
                        break;
                    case "신혜":
                        i신혜++;
                        break;
                    case "해인":
                        i해인++;
                        break;
                    case "보영":
                        i보영++;
                        break;
                }
            }

            lblPick1.Text = i보검.ToString();
            lblPick2.Text = i신혜.ToString();
            lblPick3.Text = i해인.ToString();
            lblPick4.Text = i보영.ToString();


            // 0 / 0
            lblTotalCount.Text = string.Format("{0} / {1}", _iPlayerCount + 1, iTotalCount);
            lblPlayerName.Text = strPlayerName;
        }


        private void fDataGridViewDisplay()
        {
            //dgViewList.DataSource = _strList.Select(x => new { Value = x }).ToList();

            dgViewList.DataSource = _dic.ToArray();


            //dgViewList.Rows.Clear();

            //foreach (KeyValuePair<string,string> oitem in _dic)
            //{
            //    dgViewList.Rows.Add(oitem.Key, oitem.Value);
            //}

            foreach (DataGridViewRow oRow in dgViewList.Rows)
            {
                oRow.HeaderCell.Value = oRow.Index.ToString();
            }

            dgViewList.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
        }

    }
}

 

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

C# WINFORMS Delegate  (0) 2023.04.27
C# WINFORMS DataRow, DataTable, DataSet  (0) 2023.04.27
C# WINFORMS 자료구조1 Queue, Stack  (0) 2023.04.25
C# RowIndex, ColumnIndex 수정중  (0) 2023.04.25
C# WINFORMS Timer (Clicker Game)  (0) 2023.04.24