그냥 게임개발자

TArray - Num 본문

Unreal스터디/TArray

TArray - Num

sudoju 2024. 1. 2. 22:36

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"
// StrPtr[6] - undefined behavior
  • 컨테이너가 const인 경우, 반환되는 포인터 역시 const이다.(읽기 전용)
  • 컨테이너의 엘리먼트가 얼마나 큰지 물어볼 수 있음
uint32 ElementSize = StrArr.GetTypeSize();
// ElementSize == sizeof(FString)
  • 엘리먼트 값을 얻으려면, operator[] 인덱싱을 사용해 원하는 엘리먼트에 대한 0 시작 인덱스 값을 전해주면 된다.
FString Elem1 = StrArr[1];
// Elem1 == "of"
  • 유효하지 않은 인덱스, 즉 0 미만이나 Num() 이상 값을 전해주면, 실행시간 오류가 생김
  • 컨테이너에 특정 인덱스가 유효한지 IsValidIndex 함수를 통해 물어볼 수 있다.
bool bValidM1 = StrArr.IsValidIndex(-1);
bool bValid0 = StrArr.IsValidIndex(0);
bool bValid5 = StrArr.IsValidIndex(5);
bool bValid6 = StrArr.IsValidIndex(6);
    // bValidM1 == false
    // bValid0  == true
    // bValid5  == true
    // bValid6  == false
  • operator[] 는 레퍼런스를 반환하므로, 배열이 const가 아니라는 가정하에 배열 내 엘리먼트를 변형시키는데 사용 할 수 있음
StrArr[3] = StrArr[3].ToUpper();
// StrArr == ["!", "of", "Brave", "HELLO", "World", "Tomorrow"]
  • GetData 함수처럼 Operaotr[]도 배열이 const인 경우 const 레퍼런스를 반환한다.
  • Last 함수를 사용하여 배열 끝에서부터 역순으로 인덱스를 사용할 수도 있다.
  • 인덱스 기본값은 0이다.
  • Top 함수는 Last의 동의어로 인덱스를 받지 않는다는 점이 다르다.
FString ElemEnd = StrArr.Last();
FString ElemEnd0 = StrArr.Last(0);
FString ELemEnd1 = StrArr.Last(1);
FString ElemTop = StrArr.Top();
    // ElemEnd  == "Tomorrow"
    // ElemEnd0 == "Tomorrow"
    // ElemEnd1 == "World"
    // ElemTop  == "Tomorrow"
  • 배열에 특정 엘리먼트가 들어있는지 물어볼 수 있다.
bool bHello = StrArr.Contains(TEXT("Hello"));
bool bGoodbye = StrArr.Contains(TEXT("Goodbye"));
// bHello == true;
// bGoodbye == false;
  • 또는 배열에 지정된 술부와 일치하는 엘리먼트가 있는지 물어볼 수도 있다.
bool bLen5 = StrArr.ContainsByPredicate([](const Fstring& Str)
{
    return Str.Len() == 5;
});
bool bLen6 = StrArr.ContainsByPredicate([](const FString& Str)
{
    return Str.Len() == 6;
});

// bLen5 == true
// bLen6 == false

'Unreal스터디 > TArray' 카테고리의 다른 글

TArray - Index  (0) 2024.01.02
TArray - Find  (0) 2024.01.02
TArray - StableSort  (0) 2024.01.02
TArray - HeapSort  (0) 2024.01.02
TArray - 반복 처리  (0) 2024.01.02