2012-03-01 69 views
1

我需要在地图中的一个地图中使用我的触发器。我知道如何初步建成地图作为被记载:地图内的Apex地图

Map<Id, Map<Id, Addendum__c>> addendums = new Map<Id, Map<Id, Addendum__c>>{};

但是,我无法真正的多维地图分配值。通常我会使用.put()将值放入单维地图。也许我仍然应该使用该功能,但我不能为我的生活找出正确的语法。

我试图不工作的情况如下:

addendums.put(addendum.Opportunity__c, addendum.Id, addendum);

addendums.put(addendum.Opportunity__c, (addendum.Id, addendum));

有谁知道如何做到这一点?

谢谢!

回答

3

使用您的示例代码将起作用,但当然第二级地图只能有一个条目,如果您处于可能需要更多条件的情况下,那么下面的代码将为您做好准备:

// This line creates the map in the proper format 
Map<Id,Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>{}; 

// This for loop goes through each addendum and first places it into a single dimension map. 
// Once that map is created, it is placed into the final multi-dimensional 
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch]) 
{ 
    if(addendums.get(addendum.Opportunity__c) == null) 
    { 
     addendums.put(addendum.Opportunity__c, new Map<Id, Addendum__c>{addendum.Id => addendum); 
    } 
    else 
    { 
     addendums.get(addendum.Opportunity__c).put(addendum.Id, addendum); 
    } 
} 

正如你所看到的,这使用第一张地图上的get()来获得我们想要添加附录的正确的二级地图。

0

我发现了一种方法来做到这一点,虽然我不确定它是否是最有效的方法。因此,如果您有更好的解决方案,请告诉我,我会将“解决方案”功劳转让给您。

我所做的是分配第一张地图,然后将该地图放入最终地图。

// This line creates the map in the proper format 
Map<Id,Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>{}; 

// This for loop goes through each addendum and first places it into a single dimension map. 
// Once that map is created, it is placed into the final multi-dimensional 
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch]){ 
    Map<Id,Addendum__c> thisAddendum = new Map<Id,Addendum__c>{ addendum.Id => addendum }; 
    addendums.put(addendum.Opportunity__c,thisAddendum); 
} 
1

乔希提供的方法工作正常。如果你想删除一行代码,你可以使用以下方法:

Map<Id, Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>(); 
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch]){ 
    addendums.put(addendum.opportunity__c, new Map<Id, Addendum__c>{addendum.id => addendum}); 
} 

我不知道比这个更有效的方法。

+0

感谢您的回复,我想我会把它打散,以便在一年内不可避免地要回来时更容易阅读。 – VictorKilo 2012-03-01 21:30:09