Итерация TArray Вы можете итерировать (проходить) элементы переменной TArray двумя
способами: либо используя целочисленную индексацию, либо используя итератор.
Я покажу вам оба этих способа здесь.
Ваниль цикла for и запись в квадратных скобках Использование целых чисел для индексации элементов массива иногда
называется “ваниль” цикла for. Доступ к элементам массива можно получить,
используя array[ index ], где индекс это номерная позиция элемента в массиве:
for( int index = 0; index < array.Num(); index++ )
{
//
выводим элемент массива на экран, применяя сообщение отладки
GEngine->AddOnScreenDebugMessage( index, 30.f, FColor::Red,
FString::FromInt( array[ index ] ) );
}
Итераторы Вы также можете использовать итератор, чтобы проходить по элементам массива
один за другим, как показано в следующем коде:
int count = 0; //
отслеживаем номерной индекс в массиве
for( TArray::TIterator it = array.CreateIterator(); it; ++it )
{
GEngine->AddOnScreenDebugMessage( count++, 30.f, FColor::Red,
FString::FromInt( *it ) );
}
Итераторы являются указателями в массиве. Итераторы могут использоваться,
чтобы просматривать или изменять значения внутри массива. Пример итератора
показан на следующем изображении:
189 |
С т р а н и ц а
Суть итератора: это внешний объект, который может заглядывать и просматривать
значения массива. Выполнение ++ продвигает итератор к просмотру следующего
элемента.
Итератор должен подходить для собрания элементов, через которые он проходит.
Чтобы пройти через переменную TArray, вам нужен тип итератора
TArray::TIterator.
Мы используем знак *, чтобы смотреть значение позади итератора. В предыдущем
коде, мы использовали (*it), чтобы получить целочисленное значение от
итератора. Это называется разыменование. Разыменование итератора означает
посмотреть его значение.
Операция ++it, которая происходит в конце каждой итерации цикла for,
инкрементирует итератор, продвигая его к месту следующего элемента в списке.
Введите код в программу и теперь проверьте, как она работает. Вот пример
программы, которую мы создавали до этого, используя
TArray
(всё в конструкторе
ATArraysGameMode::ATArraysGameMode()):
ATArraysGameMode::ATArraysGameMode(const class
FPostConstructInitializeProperties& PCIP) : Super(PCIP)
{
TArray array;
array.Add( 1 );
array.Add( 10 );
array.Add( 5 );
array.Add( 20 );
array.Insert( 9, 0 );//
ставим 9 спереди
array.Insert( 30, 2 );//
ставим 30 на индекс 2
if( GEngine )
{
for( int index = 0; index < array.Num(); index++ )
{
GEngine->AddOnScreenDebugMessage( index, 30.f, FColor::Red,
FString::FromInt( array[ index ] ) );
}
}
}
190 |
С т р а н и ц а
Вывод предыдущего кода, показан на следующем скриншоте: