首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地图中的顶点地图

地图中的顶点地图
EN

Stack Overflow用户
提问于 2012-03-02 02:23:27
回答 3查看 10K关注 0票数 1

我需要在我的触发器之一的Map中有一个Map。我知道如何初步构建地图,如文档所示:

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));

有人知道怎么做吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-02 09:26:30

使用您的示例代码将会起作用,当然二级映射只能有一个条目,如果您处于可能需要更多条目的情况下,则下面的代码将为您完成此任务:

代码语言:javascript
复制
// 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()来获得正确的第二级映射,我们希望在其中添加一个附录。

票数 3
EN

Stack Overflow用户

发布于 2012-03-02 04:35:29

Josh提供的方法运行良好。如果你想删除一行代码,你可以使用以下方法:

代码语言:javascript
复制
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});
}

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

票数 2
EN

Stack Overflow用户

发布于 2012-03-02 02:46:44

我找到了一种方法来做到这一点,尽管我不确定这是否是最有效的方法。所以如果你有更好的解决方案,请让我知道,我会将“解决方案”积分转移给你。

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

代码语言:javascript
复制
// 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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9521740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档