반도체, 임베디드 Study/C#

C# 컬렉션, 제네릭, 널(null), LINQ

잇(IT) 2024. 4. 29. 10:37
728x90

컬렉션의 종류

컬렉션 관련 여러 클래스(Stack, Queue, ArrayList)

Array 클래스

Array 클래스

제네릭

LINQ


컬렉션의 종류

 

배열(Array) : 일반적으로 숫자와 같이 간단한 데이터 형식을 저장한다.

리스트(List) : 간단한 데이터 형시을 포함한 개체들을 저장한다.

사전(Dictionary) : 키와 값의 쌍으로 관리되는 개체들을 저장한다.

 

배열(Array) : 정수형, 문자열 등의 집합을 나타낸다.

컬렉션(Collection) : 개체들의 집합을 나타낸다. 리스트, 집합 ,맵, 사전도 컬렉션과 같은 개념으로 사용된다.

 

- 난수 배열 생성 및 정렬

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace collection
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();

            int[] arr = new int[50];

            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = rnd.Next(1, 100);
            }

            Array.Sort(arr);

            foreach(int x in arr){
                Console.Write($"{x} ");
            }
        }
    }
}

 


컬렉션 관련 여러 클래스(Stack, Queue, ArrayList)

 

닷넷에는 컬렉션 관련 여러 클래스를 제공한다.

 

- Stack 클래스 : FIFO 즉, 마지막에 추가된 요소가 가장 먼저 꺼내지는 구조

Stack<int> myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);

Console.WriteLine(myStack.Pop()); // 출력: 3
Console.WriteLine(myStack.Pop()); // 출력: 2

Count : 스택에 있는 데이터 개수 조회

Push() : 스택에 데이터 저장하기

Pop() : 스택에 데이터 꺼내기

 

- Queue 클래스 :  FIFO 즉, 처음에 추가된 요소가 가장 먼저 꺼내지는 구조

Queue<int> myQueue = new Queue<int>();
myQueue.Enqueue(1);
myQueue.Enqueue(2);
myQueue.Enqueue(3);

Console.WriteLine(myQueue.Dequeue()); // 출력: 1
Console.WriteLine(myQueue.Dequeue()); // 출력: 2

Enqueue() : 큐에 데이터 저장

Dequeue() : 큐에 데이터 출력

 

- ArrayList 클래스 : 유연한 크기의 배열을 제공, 기본 배열로 구현되어 있으며, 크기가 자동으로 조정된다. 요소의 타입은 object로, 모든 종류의 객체를 추가할 수 있다.

ArrayList myArrayList = new ArrayList();
myArrayList.Add(1);
myArrayList.Add("Hello");
myArrayList.Add(3.14);

foreach (var item in myArrayList)
{
    Console.WriteLine(item);
}

Add() : ArrayList의 데이터 추가

Remove() : ArrayList의 데이터 삭제


Array 클래스

 

Array.Sort() : 배열을 정렬한다.

Array.Reverse() : 배열을 역순으로 바꾼다.

Array.ConvertAll() : 배열을 특정 값으로 변환한다.


Hashtable 클래스

 

Hashtable 클래스는 정수 인덱스 및 문자열 인덱스를 사용할 수 있다.

Hashtable hash = new Hashtable();

hash[0] = "zero";
hash["이름"] = "백인수";

hash[0]
// "zero"
hash["이름"]
// "백인수"

foreach (object o in hash.Keys)
{
	Console.WriteLine(hash[o]);
}

// "zero"
// "백인수"

제네릭

 

넘어 오는 데이터 형식에 따라서 해당 개체의 성격이 변경되는 구조를 제네릭이라고 한다.

 

Stack 제네릭 클래스

Stack<string> stack = new Stack<string>();
> stack.Push("First");
> stack.Pop()
"First"

 

List<T> 제네릭 클래스

List<int> lstNumbers = new List<int>();
lstNumbers.Add(30);
lstNumbers.Add(40);
for (int i = 0; i < lstNumbers.Count; i++)
{
	Console.WriteLine(lstNumbers[i]);
}
// 30
// 40

 

Enumerable 클래스

using System;
using System.Linq;

class EnumerableDemo
{
    static void Main()
    {
        // 1부터 5까지
        var numbers = Enumerable.Range(1, 5);
        foreach (var n in numbers)
            Console.Write("{0}\t", n);
        Console.WriteLine();

        // -1을 5개
        var sameNumbers = Enumerable.Repeat(-1, 5);
        foreach (var n in sameNumbers)
            Console.Write("{0}\t", n);
        Console.WriteLine();
    }
}
1       2       3       4       5
-1      -1      -1      -1      -1

 

 

Dictionary<T, T> 제네릭 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace collection
{
    class Program
    {
        static void Main(string[] args)
        {
            var data = new Dictionary<string, string>();
            data.Add("cs", "C#");
            data.Add("json", "JSON");

            Console.WriteLine($"{data["json"]}");

            var values = data.Values;

            foreach (string x in values)
            {
                Console.WriteLine($"{x}");
            }

            Console.WriteLine(values.GetType().Name);

            List<int> list = new List<int>();

            while (true)
            {
                int x = Convert.ToInt32(Console.ReadLine());
                if(x < 0)
                {
                    break;
                }
                list.Add(x);
            }
            foreach(int x in list)
            {
                Console.Write($"{x} ");
            }
        }
    }
}

 


 

NULL

 

Null은 아무것도 없는 상태를 나타낸다.

Null은 빈값(empty)과 다르다.

Null은 주소값마저 주어지지 않은 상태를 뜻한다. 

빈값(empty)는 주소값은 주어지지만 해당 주소에 값이 없는 상태를 뜻한다.

 

int i = 0;
string s = null;
string empty = "";
//s와 empty는 각각 주소값이 주어어지지 않음, 주소값이 주어졌지만 값이 없음의 차이를 가진다.

 


LINQ

 

배열 또는 리스트 등의 컬렉션 데이터를 반복문과 조건문을 사용하여 원하는 데이터를 구하는 방법을 편리하게 구현할 수 있다.

 

- Sum()

- Count()

- Average()

- Max()

- Min()

728x90