목록Unreal스터디/TArray (20)
그냥 게임개발자
Find 엘리먼트를 찾을 수 있다. 엘리먼트가 존재하는지 검사해서 있으면 인덱스를 반환할 때는 Find를 사용 다만 찾는 함수들은 모든 엘리먼트를 순회하기 때문에 성능이 좋지 않다. int32 Index; if (StrArr.Find(TEXT("Hello"), Index)) { // Index == 3 }
Num 배열에 엘리먼트가 몇 개인지 확인할 수 있다. int32 Count = StrArr.Num(); // Count == 6 C 스타일 API 같은 것과의 상호 정보 교환을 위해 배열 메모리에 직접 접근할 필요가 있는 경우, GetData 함수를 사용해서 배열 내 엘리먼트에 대한 포인터를 반환시킬 수 있음. 이 포인터는 배열이 존재하는 한에서, 그리고 배열에 대한 변형 연산이 적용되기 전에만 유효하다. 오직 StrPtr에서의 Num 인덱스만이 레퍼런스 해제 가능(dereferenceable)하다. FString* StrPtr = StrArr.GetData(); // StrPtr[0] == "!" // StrPtr[1] == "of" // ... // StrPtr[5] == "Tomorrow" // S..
StableSort 소팅 이후 동등한 엘리먼트의 상대 순서를 유지하는데 사용 됨 위에서 Sort나 HeapSort 대신 StableSort를 사용하면 결과는 아래와 같다. StrArr.StableSort([](const FString& A, const FString& B) { return A.Len() < B.Len(); }); // StrArr == ["!", "of", "Brave", "Hello", "World", "Tomorrow"] 즉 "Brave", "Hello, "World"의 기존 사전식 소팅 이후 상대 순서가 유지 StableSort는 병합 소트로 구현되어 있다. 즉, 순서대로 정렬이 된다.
소팅 배열은 Sort 함수를 호출하는 것으로 간단히 소팅 가능 StrArr.Sort(); // StrArr == ["!", "Brave", "Hello", "of", "Tomorrow", "World"]; 여기서 엘리먼트 유형 연산자< 를 사용해서 값을 소팅합니다. FString의 경우 대소문자 구분 없이 사전식 비교를 한다. StrArr.Sort([](const FString& A, const FString& B) { // 길이 별로 소팅 return A.Len() < B.Len(); }); // StrArr == ["!", "of", "Hello", "Brave", "World", "Tomorrow"]; 참고로 길이가 같은 "Hello", "Brave", "World" 스트링 셋의 상대 순서가 기존에..
반복 처리 배열의 엘리먼트에 대한 반복처리(Iterate)를 하는 방법은 여러가지가 있으나, C++의 Range for 기능을 사용하는 것을 추천 FString JoinedStr; for (auto& Str : StrArr) { JoinedStr += Str; JoinedStr += TEXT(" "); } // JoinedStr == "Hello Brave World of Tomorrow ! " 물론 일반 인덱스 기반 반복처리 역시 가능 for (int32 Index = 0; Index != StrArr.Num(); ++Index) { JoinedStr += StrArr[Index]; JoinedStr += TEXT(" "); } 마지막으로 배열에는 반복처리에 대한 보다 세밀한 제어가 가능하도록 별도의 ..
SetNum 언리얼 컨테이너 라이브러리 같은 경우에는 컨테이너가 가지고 있는 요소의 수 같은 것들을 가져올 때 Count를 쓰지 않고 SetNum함수를 사용 StrArr.SetNum(8); // StrArr == ["Hello","Brave","World","of","Tomorrow","!","",""] SetNum의 번호가 현재 배열 번호보다 작은 경우 엘리먼트를 제거하기도 함. StrArr.SetNum(6); // StrArr == ["Hello","Brave","World","of","Tomorrow","!"]
Insert Insert는 Add, Emplace, Append 처럼 단일 엘리먼트나 엘리먼트 배열 사본을 주어진 인덱스에 추가시킨다. 다만 메모리 구조가 바뀌기 때문에 비용이 좀 발생한다. StrArr.Insert(TEXT("Brave"), 1); // StrArr == ["Hello","Brave","World","of","Tomorrow","!"]