map的使用

本文中提到的map不是在AOT->Data Dicitionary->Maps中的Map,而是Axapta中的五个基础类Sets, maps, lists, arrays 和structs中的一个,为了保证效率这五个基础类是用C++写的,暴露出接口供X++调用.
map是键值对,类似于C#里的HashTable.在看财务过账的代码时,发现了一段使用Map比较典型的代码,摘录在这里,免得以后找起来麻烦.
代码路径如下:AO->Classes->SalesFormLetter->updateQueryBuild
  Map              mapSalesRecord;
  MapEnumerator    mapSalesRecordEnumerator;
  ;
   mapSalesRecord 
= map::create(Formletter::getFormRecord(callerFormDataSource));
        mapSalesRecordEnumerator 
= mapSalesRecord.getEnumerator();

        
while (mapSalesRecordEnumerator.moveNext())
        
{
            localSalesTable 
= mapSalesRecordEnumerator.currentValue();

         }
创建map时使用了map类的静态方法create,其入参为container.
看一下FormLetter的静态方法getFormRecord.
client static container getFormRecord(FormDataSource TradeRecord_ds)
{
    common      TradeRecord;
    Map         mapTradeRecord 
= new map(TYPES::INTEGER,TYPES::RECORD);

    
for (TradeRecord = TradeRecord_ds.getFirst(true? TradeRecord_ds.getFirst(true) : TradeRecord_ds.cursor(); TradeRecord; TradeRecord = TradeRecord_ds.getNext())
    
{
        mapTradeRecord.insert(TradeRecord.RecId,TradeRecord);
    }


    
return mapTradeRecord.pack();
}

虽然感觉上面的代码有些过烦,不过做为map的使用示例还是比较适合的.当然也可以用MapIterator类来遍历map,在while()里的将是mapIterator.more(),取值用mapIterator.value,move到下一条用mapIterator.next(),如下所示:
MapIterator  mapIterator;
;
mapIterator 
= new MapIterator(mapSalesRecord);
while(mapIterator.more())
{
     localSalesTable 
= mapIterator.value();
     
     mapIterator.next();
}

原文地址:https://www.cnblogs.com/Farseer1215/p/508542.html