목록Unreal스터디 (36)
그냥 게임개발자
FilterByPredicate 특정 술부에 일치하는 엘리먼트의 배열을 가져온다. auto Filter = StrArray.FilterByPredicate([](const FString& Str) { return !Str.IsEmpty() && Str[0] < TEXT('M'); });
IndexOfByPredicate 지정된 술부에 일치하는 첫 엘리먼트 인덱스를 찾는 데 사용할 수 있으며, 찾은 것이 없으면 마찬가지로 특수 INDEX_NONE값을 반환 int32 Index = StrArr.IndexOfByPredicate([](const FString& Str) { return Str.Contains(TEXT("r")); }); // Index == 2 인덱스 반환 대신, 찾은 엘리먼트로의 포인터를 반환할 수도 있다. FindByKey는 엘리먼트를 임의 오브젝트에 비교하는 식으로 IndexOfByKey 처럼 작동하나, 찾은 엘리먼트가 있으면 그 포인터를 , 없으면 nullptr를 반환한다. auto* OfPtr = StrArr.FindByKey(TEXT("of")); auto* The..
IndexOfByKey 이것도 비슷하게 작동하지만, 엘리먼트와 임의 오브젝트의 비교가 가능하다. Find 함수로는 검색 시작 전 인수를 엘리먼트 유형(이 경우 FString)으로 실제 변환한다. IndexOfByKey 함수로는 키 비교를 바로 하여, 키 유형을 엘리먼트 유형으로 직접 변환할 수 없을 때에도 검색이 가능 IndexOfByKey 는 operator==(ElementType, KeyType)가 존재하는지 키 유형에 대해 작동한다. IndexOfByKey는 처음 찾은 엘리먼트의 인덱스 또는 찾은 것이 없으면 INDEX_NONE을 반환한다. int32 Index = StrArr.IndexOfByKey(TEXT("Hello")); // Index == 3
Index 처음 찾은 엘리먼트의 인덱스로 설정된다. 중복된 엘리먼트가 있는 상태에서 마지막 엘리먼트의 인덱스를 찾고자 하는 경우, FindLast 함수를 대신 사용하면 된다. int32 IndexLast; if (StrArr.FindLast(TEXT("Hello"), IndexLast)) { // IndexLast == 3, 하지만 중복되지 않음 } 이 두함수 모두 엘리먼트를 찾았는지 여부를 나타내는 부울 값을 반환하면서, 찾았을 경우 그 엘리먼트의 인덱스 값을 변수에 쓰기도 한다. Find와 FindLast는 엘리먼트 인덱스를 직접 반환할 수도 있다. 인덱스를 명시적 인수로 전달하지 않으면 그렇게 한다. int32 Index2 = StrArr.Find(TEXT("Hello")); int32 IndexL..
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" 스트링 셋의 상대 순서가 기존에..