2012-03-01 47 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