一、UE4 中,TMap<int32,int32> 正向遍历,带条件删除。
注意点:在调用 Remove(it->Key);之后,it 并不会自动往后移动,仍然需要调用 ++it,才会指向下一个值。
// TMap<> 正向遍历,带条件删除。
TMap<int32, int32> aaaa;
aaaa.Add(1, 2);
aaaa.Add(16, 2);
aaaa.Add(7, 2);
aaaa.Add(5, 2);
aaaa.Add(26, 2);
aaaa.Add(2, 2);
aaaa.Add(4, 2);
aaaa.Add(8, 2);
aaaa.Add(6, 2);
TMap<int32, int32>::TIterator it = aaaa.CreateIterator();
for (; it; ++it)
{
int32 nn = it->Key;
if (it->Key == 7 || it->Key == 2 || it->Key == 8)
{
aaaa.Remove(it->Key);
}
}
二、UE4 中,TArray<> 正向遍历,带条件删除。
注意点:在调用 RemoveAt(i) 之后,不能执行 i++,否则会漏掉一个元素的访问。
// TArray<> 正向遍历,带条件删除。
TArray<int32> ArrInt = { 3,6,1,3,7,2,9,8,6 };
for (int32 i = 0; i < ArrInt.Num();)
{
int32 nTemp = ArrInt[i];
if (nTemp == 1 || nTemp == 7 || nTemp == 8)
{
ArrInt.RemoveAt(i);
continue;
}
i++;
}
三、UE4 中,TArray<> 逆向遍历,带条件删除。
注意点:这里删除后,没有特殊操作,也是推荐的删除方法。
// TArray<> 逆向遍历,带条件删除。
TArray<int32> ArrIntR = { 3,6,1,3,7,2,9,8,6 };
for (int32 j = ArrIntR.Num() - 1; j >= 0; j--)
{
int32 nTemp = ArrIntR[j];
if (nTemp == 1 || nTemp == 7 || nTemp == 8)
{
ArrIntR.RemoveAt(j);
}
}