컬렉션의 종류
컬렉션 관련 여러 클래스(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()
'Embedded > 3. C, C#, Python' 카테고리의 다른 글
C# - 계산기 만들기 (Class, Stack 사용) (코드 설명 필요) (0) | 2024.05.19 |
---|---|
C - 포인터 (0) | 2024.05.13 |
C# - 문자열 / 예외 처리 (0) | 2024.04.22 |
C# - 코딩 연습 / 1. Lotto 제작 / 2. 가위바위보 게임 (0) | 2024.04.22 |
C - 헷갈리는 개념 정리 (0) | 2024.04.17 |