Existem duas formas de iterar as coleções do X++. Utilizando um iterator ou utilizando um enumerator. Eles têm funcionalidades bem parecidas, mas o enumerator deve ser utilizado sempre que possível em detrimento ao iterator.
Vamos ver exemplos do dois:
Iterando com o Iterator
Map mapa = new Map(Types::Integer, Types::String);
MapIterator mapaIt;
mapa.insert(1, "Joao");
mapa.insert(2, "Eduardo");
mapa.insert(3, "Maria");
mapa.insert(4, "Joao");
mapaIt = new MapIterator(mapa);
while(mapaIt.more())
{
print mapaIt.value();
mapaIt.next();
}
pause;
//Resultado:
//Joao
//Eduardo
//Maria
//Joao
Como o enumerator fica bem parecido, uma vantagem é que o método moveNext do enumerator, pula para o próximo item ao mesmo tempo que retorna um boleano se existem mais linhas. Desta forma não é necessário um método next e ou more (como no iterator):
List lista = new List(Types::Integer);
ListEnumerator listaEt;
;
lista.addEnd(10);
lista.addEnd(20);
lista.addStart(1);
lista.addEnd(50);
listaEt = lista.getEnumerator();
while (listaEt.moveNext())
{
print listaEt.current();
}
pause;
//Resultado:
//1
//10
//20
//50
Todas as coleções que vimos até agora suportam tanto a utilização do iterator como do enumerator: Map, Set, Array e List