2차원 List 초기화

jh Seo·2023년 1월 28일
0

유니티

목록 보기
22/44

개요

2차원 List <string>를 사용해야하는데 List를 담는 List부분만
초기화를 하고싶은데 어떻게 하는지를 모르겠어서 찾아봤다.

C++의 벡터같은 경우는

vector<vector<string>> v;
v.resize(3);

이런식으로 하면 vector<string> 3개를 담는 벡터 v가 생성되어서
v[2], v[1] 이런식으로 접근이 가능해진다.

하지만 C# 같은 경우는 new키워드로 늘 초기화를 해줘야 하니 익숙하지 않아서
다양한 방법을 시도해보았다.

접근 방법

  1. List<List<string>>을 선언 후, 새로운 리스트를 하나 만들고
    해당 리스트값을 3번 넣어줬다.
    List<List<string>> target;
    List<string> tmp;
    private void Awake(){
    	tmp=new List<string>();
       target= new List<List<string>>();
       for(int i=0;i<3;i++){
       	target.push(tmp);
       }
    }
    이렇게 하면 당연히 target[2] 이런식으로 접근은 가능하지만
    바로 알아챈 문제인데 target[1].Add()를 하든 target[2].Add()를 하든
    모든 List가 tmp리스트를 가지고있어서 다 공유를 해버린다..

    안댐!

  2. 혹시 null을 넣으면 될까? 하고
    위의 코드에서 tmp대신 null을 세번 푸시해줬지만 역시 target[2]이렇게 못 불러왔다..

    안댐!

해결방법

list는 크기 상관하지말고 쓰라는 자료구조인데
굳이 리스트 두개를 써야하나 해서
생각을 바꿔서 list배열을 선언해줬다.

List<string>[] target;

private void Awake(){
   target= new list<string>[3];
   for(int i=0;i<3;i++){
   	target[i]=new List<string>();
   }
}

이런식으로 3개의 리스트를 할당해준 후 각 리스트를 new키워드를 이용해
생성해줬더니 원하는대로 잘 작동을 하였다.

profile
코딩 창고!

0개의 댓글