UE官方文档学习 C++ TAarry 查询(三)Contain,Find函数的使用
一.Contain
Contain只是判断是否有这个元素.
但ContainsByPredicate ,通过重新定义谓词 == 。不仅能判断,是否有符合这个元素的长度元素(谓词)。还能断言打日志。这里就使用Lamda函数值传递,一直对每个下标累加,标记。从头开始找,直到找到满足条件的就返回,为true。找不到就为false
void AWXArrayActor::WXContainArray()
{TArray<FString> StrArr = { "1234756","33","Hello", "World", "of", "Tomorrow","!" };bool bHello = StrArr.Contains("Hello");bool bFuck = StrArr.Contains("Fuck");int32 bFind5Character = 0;//bool bLen5 = StrArr.ContainsByPredicate([&bFind5Character](const FString& Str) {++bFind5Character;UE_LOG(LogTemp,Warning,TEXT("bLen5,[%d]"), bFind5Character);return Str.Len() == 5;});int32 bFind6Character = 0;bool bLen6 = StrArr.ContainsByPredicate([&bFind6Character](const FString& Str) {++bFind6Character;UE_LOG(LogTemp,Warning,TEXT("bLen6,[%d]"),bFind6Character);return Str.Len() == 6;});// bLen5 == true// bLen6 == false}
二、Find来找
可以从前面找或者后面找,返回下标。找到第一个,最好默认为-1。
void AWXArrayActor::XGFindElementArray()
{TArray<FString> StrArr = { "Hello", "World", "of", "Tomorrow","Hello","!" };int32 Index = -1;if (StrArr.Find(TEXT("Hello"), Index)){}bool bIndex = StrArr.Find(TEXT("Hello"), Index);int32 LastIndex = -1;if (StrArr.FindLast(TEXT("Hello"), LastIndex)){}bool bIndexFromLast = StrArr.FindLast(TEXT("Hello"), LastIndex);int32 ErrorIndex = -1;bool bErrorIndex = StrArr.FindLast(TEXT("Fuck"), ErrorIndex);int32 Index2 = StrArr.Find(TEXT("Hello"));int32 IndexLast2 = StrArr.FindLast(TEXT("Hello"));int32 IndexNone = StrArr.Find(TEXT("None"));bool bIndexNone = INDEX_NONE == IndexNone;
}