728x90
- 컬렉션(Collection)
- 데이터 저장, 검색, 기타 데이터 처리 특화
- 자료구조(Data Structure)
- 선언 방법, 참조 방법, 중요 메소드
- ArrayList
- 배열과 비슷
- 크기가 유동적(동적)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _095_ArrayList
{
class Program
{
static void Main(string[] args)
{
ArrayList arrList = new ArrayList();
//Add 함수는 어떤 데이터형도 다 받을 수 있음(object)
arrList.Add("Hello"); //Add(string name);
arrList.Add(10f); //Add(float num);
for(int i = 0; i < 10; i++)
{
arrList.Add(i);
}
foreach(object data in arrList)
{
Console.WriteLine("arrList data : " + data);
}
//배열 데이터로 초기화
Console.WriteLine("배열 데이터로 초기화");
int[] arrData = { 100, 200, 300 };
ArrayList arrCopyList = new ArrayList(arrData);
foreach(object data in arrCopyList)
{
Console.WriteLine("arrCopyList data : " + data);
}
}
}
}
- Queue
- 순차적 데이터 처리
- FIFO(First In First Out)
- 게임에서 순차적 AI기능 구현
- Dequeue(). Enqueue(), Peek()
- 배열 데이터가 Enqueue로 들어와서 Dequeue로 데이터가 순차적으로 삭제된다
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _096_Queue
{
class Program
{
static void Main(string[] args)
{
Queue queue = new Queue();
queue.Enqueue("a");
queue.Enqueue("b");
queue.Enqueue("c");
for (int i = 0; i < 10; i++)
{
queue.Enqueue(i);
}
Console.WriteLine("queue data : {0}", queue.Peek());
while(queue.Count > 0)
{
Console.WriteLine("queue data : {0}, count : {1}", queue.Dequeue(), queue.Count);
}
//배열 데이터로 초기화
Console.WriteLine("배열 데이터로 초기화");
int[] arrData = { 100, 200, 300 };
Queue queueCopy = new Queue(arrData);
foreach(object data in queueCopy)
{
Console.WriteLine("queueCopy datat : " + data);
}
}
}
}
- Stack
- 순차적 데이터 처리
- LIFO(Last In First Out)
- 뒤로가기 기능 구현
- Push(), Pop(), Peek()
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _097_Stack
{
class Program
{
static void Main(string[] args)
{
Stack stack = new Stack();
stack.Push("a");
stack.Push("b");
stack.Push("c");
for(int i = 0; i < 10; i++)
{
stack.Push(i);
}
Console.WriteLine("stack data : {0}", stack.Peek());
while(stack.Count > 0)
{
Console.WriteLine("queue data : {0}, count : {1}", stack.Pop(),stack.Count);
}
//배열 데이터로 초기화
Console.WriteLine("배열 데이터로 초기화");
int[] arrData = { 100, 200, 300 };
Stack stackCopy = new Stack(arrData);
foreach(object data in stackCopy)
{
Console.WriteLine("stackCopy data : " + data);
}
}
}
}
- Hashtable
- 키와 값이 상으로 구성되는 데이터
- 탐색 속도가 빠르고 사용이 편리
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _098_Hashtable
{
class Program
{
static void Main(string[] args)
{
Hashtable hasTable = new Hashtable();
hasTable.Add("pos", 10);
hasTable.Add("name", "Jack");
hasTable["weight"] = 10.8f;
foreach(object key in hasTable.Keys)
{
Console.WriteLine("key : {0}, data : {1}", key, hasTable[key]);
}
Console.WriteLine("");
Hashtable hashTableCopy = new Hashtable()
{
["pos"] = 100,
["name"] = "Jane",
["weight"] = 100.8f,
};
foreach(object key in hashTableCopy.Keys)
{
Console.WriteLine("key : {0}, data : {1}", key, hashTableCopy[key]);
}
}
}
}
- 인덱서
- 배열 or 컬렉션의 외부 접근
- 키워드 : get, set, return, value, this[int index]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _099_Indexer01
{
class AA
{
private int[] num = new int[10];
public int this[int index]
{
get { return num[index]; }
set { num[index] = value; }
}
}
class Program
{
static void Main(string[] args)
{
AA aa = new AA();
for(int i = 0; i < 10; i++)
{
aa[i] = i;
}
aa[0] = 1000;
aa[1] = 100;
for(int i = 0; i < 10; i++)
{
Console.WriteLine("aa[{0}] : {1}", i, aa[i]);
}
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _100_Indexer02
{
class AA
{
ArrayList arrayList = new ArrayList();
public string this[int index]
{
get
{
if (index >= 0 && index < arrayList.Count)
return (string)arrayList[index];
else
return null;
}
set
{
if (index >= 0 && index < arrayList.Count)
arrayList[index] = value;
else if (index == arrayList.Count)
arrayList.Add(value);
}
}
public int count
{
get { return arrayList.Count; }
}
}
class Program
{
static void Main(string[] args)
{
AA aa = new AA();
for(int i = 0; i < 10; i++)
{
aa[i] = string.Format("{0}", i);
}
aa[0] = "Hello";
aa[1] = "World";
aa[10] = "!!!!";
for (int i = 0; i < aa.count; i++)
{
Console.WriteLine("aa : " + aa[i]);
}
}
}
}
728x90
'게임 프로그래밍 > C#' 카테고리의 다른 글
C# 예외 처리(try~catch, exception, throw, finally) (0) | 2021.12.21 |
---|---|
C# 함수/클래스 일반화(Generic 제네릭) (0) | 2021.12.20 |
C# RPG게임 예제 코드 (0) | 2021.12.20 |
C# 인터페이스, 추상 클래스, 프로퍼티 (0) | 2021.12.19 |
C# 클래스 다형성 (0) | 2021.12.19 |