이번에 연습겸 프로젝트를 하면서도 Dictionary를 사용했다. 하지만 어떤 느낌인지는 알고 정확한 정의라던지 새로운 예시를 알고싶어서 포스트에 정리하고자 한다.
그렇다면 유니티의 자료구조중에서 유용하게 쓰이는 Dictionary에 대해 알아보도록 하자.
Dictionary는 시간복잡도로 계산해보면 효율성이 상당히 높다. 물론 검색 등에서 수가 작으면 List가 효율적이긴 하지만, 개수의 어느 기점부터 Dictionary의 효율이 확실하게 나타난다.
그러면 이 사기같은 Dictionary는 무엇인가?
이렇게 표현하면 맞는지 모르겠지만 Java 의 Map과 비슷하다.
이렇게 Key와 Value를 이용하며 Key값을 통해 Value를 필요할 때 딱 가져올 수 있다.
아래는 Dictionary의 활용 예시와 방법이다.
1. Dictionary 사용(아이템 클래스)
예제를 위해 먼저 아이템 클래스를 생성한다.
// 아이템 생성
public class Item
{
private string _name;
private int _atk;
private int _def;
// 생성자 생성
public Item(string name, int atk, int def)
{
_name = name;
_atk = atk;
_def = def;
}
public void PrintItem()
{
Console.WriteLine("이름" + _name);
Console.WriteLine("이름" + _atk);
Console.WriteLine("이름" + _def);
}
2. 아이템 등록해보기
물론 이렇게 안쓰이지만, 예제를 위해서 Key값을 아이템 이름으로 하고 Value값을 아이템으로 하여 Dictionary에 ADD해보도록 하겠다.
public class DictionaryItems
{
Dictionary<string, Item> _items;
// 캐싱
void Start()
{
_items = new Dictionary<string, Item>();
MapingItems();
SelecteItem();
}
// 아이템 ADD
void MapingItems()
{
string name;
// 낡은검, 공 3 방;
name = "낡은 검";
_items.Add(name, new Item(name, 3, 0));
// 낡은 방패, 공 3 방;
name = "낡은 방패";
_items.Add(name, new Item(name, 0, 3));
// 강철 검, 공 3 방;
name = "강철 검";
_items.Add(name, new Item(name, 5, 0));
// 강철 방패, 공 3 방;
name = "강철 방패";
_items.Add(name, new Item(name, 0, 5));
}
}
위와 같이하면 name값을 Key값으로 하여 item이 들어가게 된다.
이제 이를 등록했다면 가져오는 방법도 알아야 한다.
가져오는 방법에는 두 가지가 있는데 Contains를 사용하거나, TryGetValue를 사용하면 된다.
3. 아이템 가져오기
1. Contains 사용
// 키값으로 불러오기
void SelecteItem()
{
if(_items.ContainsKey ("낡은 검"))
{
Item item = _items["낡은 검"];
item.PrintItem();
}
}
string값을 Key로 하면 오타에 주의하자. 예시가 아니었다면 key값으로 int나 enum을 이용했을 것 같다.
2. TryGetValue 사용
// TryGetValue로 key값으로 찾아오기
void TryValueSelectItem()
{
Item item;
if (_items.TryGetValue("낡은 검", out item))
{
Console.WriteLine($"아이템: {item}");
}
}
key를 넣고 그 key에 맞는 value값이 나오게 된다.
그렇다면 마지막으로 item을 가져왔으니 삭제해 보도록 하자.
4. 아이템 삭제하기
void DeleteItem()
{
string name = "아주 강한 무언가";
_items.Add(name, new Item(name, 9999, 9999));
// 아주 강한 무언가 삭제
_items.Remove(name);
}
Remove를 사용하면 아이템이 삭제가 가능하다.
Dictionary를 사용할 일이 있어서 간단하게 한번 정리해보았다.
'Unity' 카테고리의 다른 글
시네머신 카메라 - 버츄얼 카메라 (0) | 2023.12.18 |
---|---|
프로그래머스 두 개 뽑아서 더하기( List Distinct()로 중복값 제거하기 ) (1) | 2023.12.15 |
LayMask와 비트연산자 처리 (1) | 2023.12.11 |
[Unity] 투사체 구현하기 (2) | 2023.12.08 |
[프로그래머스] 숫자 문자열과 영단어 C# (1) | 2023.12.08 |