Podemos ver muitos posts por ai dizendo que Abap não possui Arrays em vez disto possui Internal Tables e que são melhores que Arrays pela sua facilidade de manipulação.
Bem isto não é de inteira verdade, o Abap possui sim Arrays, como vimos em nosso post anterior, criamos uma Lista de Arrays contendo objetos usando a classe de coleção standart (CL_OBJECT_COLLECTION) e vamos usar agora outra forma de array para guardar objetos, mas desta vez teremos um pouco mais de controle sobre eles.
Map é um objeto que mapeia chaves e valores. Um mapa não pode conter chaves duplicadas, cada chave pode mapear , no máximo, um valor. Em algumas linguagens de programação um MAP chama-se Dictionary.
A interface Map fornece três visualizações de coleta, que permitem que o conteúdo de um mapa seja visto como um conjunto de chaves, cobrança de valores, ou um conjunto de mapeamentos chave-valor. A ordem de um mapa é definida como a ordem em que os iteradores em exibições de coleta do mapa devolver os seus elementos.
Em ABAP um MAP pertence a classe: CL_OBJECT_MAP
Exemplo: Neste exemplo criamos um simples programa que guarda objetos dentro de um objeto MAP e usa sua chave para remover um objeto do mapa, para dar ênfase nos mapas usamos um estilo de programação hibrida.
Abap
*&---------------------------------------------------------------------* *& Report ZCOLLECTION *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Collection - MAP *&---------------------------------------------------------------------* REPORT ZCOLLECTION. * Classe MAPA CLASS MAPA DEFINITION. PUBLIC SECTION. DATA CHAVE TYPE STRING. DATA VALOR TYPE STRING. METHODS: CONSTRUCTOR IMPORTING CHAVE TYPE STRING OPTIONAL VALOR TYPE STRING OPTIONAL. ENDCLASS. CLASS MAPA IMPLEMENTATION. METHOD constructor. me->CHAVE = CHAVE. me->VALOR = VALOR. ENDMETHOD. ENDCLASS. START-OF-SELECTION. * Declara e instancia objeto MAP DATA MAP TYPE REF TO CL_OBJECT_MAP. CREATE OBJECT MAP. * cria Objeto MAPA DATA MAPA TYPE REF TO MAPA. * Adiciona CHAVE e VALOR no MAP WRITE : / 'Lista de musicas do Beatles'. PERFORM ADD USING '01' 'Let it be'. PERFORM ADD USING '02' 'Dont let me down'. PERFORM ADD USING '03' 'Come togheter'. PERFORM ADD USING '04' 'Hey Jude'. PERFORM ADD USING '05' 'Twist and shout'. * Declara Iterador DATA ITERADOR TYPE REF TO CL_OBJECT_COLLECTION_ITERATOR. ITERADOR ?= MAP->GET_VALUES_ITERATOR( ). PERFORM MOSTRAMAPA. WRITE : / , / . WRITE : / 'Remove musica 04 da lista'. MAP->REMOVE( '04' ). * Lembre-se que com o Iterador podemos fazer * uma alusão ao result de um banco de dados ITERADOR ?= MAP->GET_VALUES_ITERATOR( ). PERFORM MOSTRAMAPA. * Retorna conteudo do mapa usando o Iterador FORM MOSTRAMAPA. WHILE ITERADOR->HAS_NEXT( ) IS NOT INITIAL. MAPA ?= ITERADOR->GET_NEXT( ). WRITE : / 'Chave:', MAPA->CHAVE,'Valor:', MAPA->VALOR. ENDWHILE. ENDFORM. * Adiciona objeto no objeto MAP FORM ADD USING VALUE(C) TYPE STRING VALUE(V) TYPE STRING. CREATE OBJECT MAPA exporting CHAVE = C VALOR = V. MAP->PUT( exporting KEY = MAPA->CHAVE VALUE = MAPA ). ENDFORM.