C#프로그래밍

namespace, 컬렉션[ArrayList, Hashtable, Stack, Queue]

다모아 2023. 7. 26. 11:08

namespace 키워드는 관련 개체 집합을 포함하는 범위를 선언하는 데 사용됩니다.

 

컬렉션

1.  ArrayList [비선호, for문 O, 배열임] , 동적 배열이다.

using System;
using System.Collections;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            //None-Generic Collection Class
            //네임스페이스 : System.Collections
            //ArrayList : 동적 배열
            //컬렉션 인스턴스화
            ArrayList list = new ArrayList();
            //요소를 추가한다
            list.Add("홍길동");
            list.Add(123);
            list.Add(new Item());
            int[] arr = { 1, 2, 3 };
            list.Add(arr);
            //요소를 가져온다
            string name = (string)list[0];
            int num = (int)list[1];
            //순회
            for(int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }

            foreach(object obj in list)
            {
                Console.WriteLine(obj);
            }

        }
    }
}

 

2. Hashtable [비선호, for문 X, 배열이 아님]

using System;
using System.Collections;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            //Hashtable : 키/값 쌍으로 저장하는 컬렉션

            //인스턴스화
            Hashtable ht = new Hashtable();
            //요소에 값을 넣기
            ht.Add(100, "장검");
            ht.Add(101, "단검"); //같은 키 안됨!

            //순회
            Console.WriteLine(ht.Count); //컬렉션의 요소의 수
            foreach(DictionaryEntry entry in ht)
            {
                Console.WriteLine("{0},{1}", entry.Key, entry.Value);
            }
            //Key로 요소를 제거
            ht.Remove(100);
            Console.WriteLine(ht.Count);
            foreach (DictionaryEntry entry in ht)
            {
                Console.WriteLine("{0},{1}", entry.Key, entry.Value);
            }
            
            //Hashtable로부터 키값으로 Value를 가져오는 방법
            string itemName = ht[101].ToString();
            Console.WriteLine(itemName);
            ht.Clear(); //모든요소 지우기

            Console.WriteLine("contains : {0}",ht.ContainsKey(100));
        }
    }
}

 

3.Queue [FiFO 선입선출]

using System;
using System.Collections;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            //Queue : FIFO (선입선출)
            //인스턴스화
            Queue q = new Queue();
            //요소에 값을 할당
            q.Enqueue("홍길동");
            q.Enqueue(123);
            //요소 꺼내기
            string name = (string)q.Dequeue();
            Console.WriteLine(name);
            Console.WriteLine(q.Count); // 1
            int num = (int)q.Peek();
            Console.WriteLine(num);
            Console.WriteLine(q.Count); //1
            //순회
            foreach(object obj in q) {
                Console.WriteLine(obj);
            }
        }
    }
}

 

4. Stack [LIFO 후입선출]

using System;
using System.Collections;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            //프링글스 : 마지막에 넣은 것을 가장 먼저 꺼낸다.
            //인스턴스화
            Stack stack = new Stack();
            //넣기
            stack.Push("홍길동");
            stack.Push(123);
            //빼기
            int num = (int)stack.Pop(); //123꺼냄
            Console.WriteLine(num); //123
            Console.WriteLine(stack.Count); //1
            string name = (string)stack.Peek();
            Console.WriteLine(name);
            Console.WriteLine(stack.Count); //1
            //순회
            foreach(object obj in stack)
            {
                Console.WriteLine(obj);
            }
        }
    }
}