目录
FSetElementId:结构体可查找集合中某个键的索引。然后,就可使用该索引与 运算符[] 查找元素
TSet 被销毁时,其元素也将被销毁。键类型也必须是值类型。TSet FruitSet; //尚未分配内存
- FruitSet.Add(TEXT("Banana"));
- FruitSet.Add(TEXT("Grapefruit"));
- FruitSet.Add(TEXT("Pineapple"));
- // FruitSet == [ "Banana", "Grapefruit", "Pineapple" ]
-
- FruitSet.Add(TEXT("Pear"));
- FruitSet.Add(TEXT("Banana"));
- // FruitSet == [ "Banana", "Grapefruit", "Pineapple", "Pear" ]
- // Note:Only one banana entry.
此处的元素按插入顺序排列,但不保证这些元素在内存中实际保留此排序。如果是新集合,可能会保留插入排序,但插入和删除的次数越多,新元素不出现在末尾的可能性越大。
- FruitSet.Emplace(TEXT("Orange"));
- // FruitSet == [ "Banana", "Grapefruit", "Pineapple", "Pear", "Orange" ]
- TSet
FruitSet2; - FruitSet2.Emplace(TEXT("Kiwi"));
- FruitSet2.Emplace(TEXT("Melon"));
- FruitSet2.Emplace(TEXT("Mango"));
- FruitSet2.Emplace(TEXT("Orange"));
- FruitSet.Append(FruitSet2);
- // FruitSet == [ "Banana", "Grapefruit", "Pineapple", "Pear", "Orange", "Kiwi", "Melon", "Mango" ]
范围for
- for (auto& Elem :FruitSet)
- {
- FPlatformMisc::LocalPrint( *FString::Printf(TEXT(" \"%s\"\n"), *Elem ));
- }
- // 依次输出 "Banana" "Grapefruit" "Pineapple" "Pear" "Orange" "Kiwi" "Melon" "Mango"
迭代器
- for (auto It = FruitSet.CreateConstIterator(); It; ++It)
- {
- FPlatformMisc::LocalPrint( *FString::Printf(TEXT("(%s)\n"), *It ) );
- }
int32 Count = FruitSet.Num(); // Count == 8
- bool bHasBanana = FruitSet.Contains(TEXT("Banana")); // bHasBanana == true
- bool bHasLemon = FruitSet.Contains(TEXT("Lemon")); // bHasLemon == false
在非常量集合上调用 operator[] 将返回非常量引用,而在常量集合上调用将返回常量引用
- FSetElementId BananaIndex = FruitSet.Index(TEXT("Banana"));
- // BananaIndex is a value between 0 and (FruitSet.Num() - 1)
- FPlatformMisc::LocalPrint( *FString::Printf( TEXT(" \"%s\"\n"), *FruitSet[BananaIndex] ));
- // Prints "Banana"
-
- FSetElementId LemonIndex = FruitSet.Index(TEXT("Lemon"));
- // LemonIndex is INDEX_NONE (-1)
- FPlatformMisc::LocalPrint( *FString::Printf(TEXT(" \"%s\"\n"), *FruitSet[LemonIndex] ));
- // Assert!
Find:返回指向元素数值的指针
Find,返回的指针也将为常量- FString* PtrBanana = FruitSet.Find(TEXT("Banana")); // *PtrBanana == "Banana"
- FString* PtrLemon = FruitSet.Find(TEXT("Lemon")); // PtrLemon == nullptr
Array:会返回一个 TArray,其中填充了 TSet 中每个元素的一份副本
- TArray
FruitArray = FruitSet.Array(); - // FruitArray == [ "Banana","Grapefruit","Pineapple","Pear","Orange","Kiwi","Melon","Mango" ] (order may vary)
- FruitSet.Remove(0);
- // FruitSet == [ "Grapefruit","Pineapple","Pear","Orange","Kiwi","Melon","Mango" ]
-
- int32 RemovedAmountPineapple = FruitSet.Remove(TEXT("Pineapple"));
- // RemovedAmountPineapple == 1
- // FruitSet == [ "Grapefruit","Pear","Orange","Kiwi","Melon","Mango" ]
- int32 RemovedAmountLemon = FruitSet.Remove(TEXT("Lemon"));
- // RemovedAmountLemon == 0
Empty 或 Reset 函数可将集合中的所有元素移除- TSet
FruitSetCopy = FruitSet; - // FruitSetCopy == [ "Grapefruit","Pear","Orange","Kiwi","Melon","Mango" ]
-
- FruitSetCopy.Empty();
- // FruitSetCopy == []
TSet 可以排序。排序后,迭代集合会以排序的顺序显示元素,但下次修改集合时,排序可能会发生变化。由于排序不稳定,可能按任何顺序显示集合中支持重复键的等效元素。
Sort 函数指定排序顺序的二进制谓词- FruitSet.Sort([](const FString& A, const FString& B) {
- return A > B; // sort by reverse-alphabetical order
- });
- // FruitSet == [ "Pear", "Orange", "Melon", "Mango", "Kiwi", "Grapefruit" ] (order is temporarily guaranteed)
-
- FruitSet.Sort([](const FString& A, const FString& B) {
- return A.Len() < B.Len(); // sort strings by length, shortest to longest
- });
- // FruitSet == [ "Pear", "Kiwi", "Melon", "Mango", "Orange", "Grapefruit" ] (order is temporarily guaranteed)
- TSet
NewSet = FruitSet; - NewSet.Add(TEXT("Apple"));
- NewSet.Remove(TEXT("Pear"));
- // FruitSet == [ "Pear", "Kiwi", "Melon", "Mango", "Orange", "Grapefruit" ]
- // NewSet == [ "Kiwi", "Melon", "Mango", "Orange", "Grapefruit", "Apple" ]
参考链接: