map的使用

本文中提到的map不是在AOT->Data Dicitionary->Maps中的Map,而是Axapta中的五个基础类Sets, maps, lists, arrays 和structs中的一个,为了保证效率这五个基础类是用C++写的,暴露出接口供X++调用.
map是键值对,类似于C#里的HashTable.在看财务过账的代码时,发现了一段使用Map比较典型的代码,摘录在这里,免得以后找起来麻烦.
代码路径如下:AO->Classes->SalesFormLetter->updateQueryBuild
None.gif   Map              mapSalesRecord;
None.gif  MapEnumerator    mapSalesRecordEnumerator;
None.gif  ;
None.gif   mapSalesRecord 
=  map::create(Formletter::getFormRecord(callerFormDataSource));
None.gif        mapSalesRecordEnumerator 
=  mapSalesRecord.getEnumerator();
None.gif
None.gif        
while  (mapSalesRecordEnumerator.moveNext())
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            localSalesTable 
= mapSalesRecordEnumerator.currentValue();
InBlock.gifdot.gifdot.gif
ExpandedBlockEnd.gif         }
创建map时使用了map类的静态方法create,其入参为container.
看一下FormLetter的静态方法getFormRecord.
None.gif client  static  container getFormRecord(FormDataSource TradeRecord_ds)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    common      TradeRecord;
InBlock.gif    Map         mapTradeRecord 
= new map(TYPES::INTEGER,TYPES::RECORD);
InBlock.gif
InBlock.gif    
for (TradeRecord = TradeRecord_ds.getFirst(true? TradeRecord_ds.getFirst(true) : TradeRecord_ds.cursor(); TradeRecord; TradeRecord = TradeRecord_ds.getNext())
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        mapTradeRecord.insert(TradeRecord.RecId,TradeRecord);
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
return mapTradeRecord.pack();
ExpandedBlockEnd.gif}

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

转载于:https://www.cnblogs.com/Farseer1215/archive/2006/09/19/508542.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值