首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用嵌套地图对数据进行分组

如何使用嵌套地图对数据进行分组
EN

Stack Overflow用户
提问于 2018-12-20 13:51:11
回答 1查看 29关注 0票数 0

我正在尝试使用地图对我的事件数据进行分组。我试图完成的是将我的活动分组在周>预订者>每周预订的appt的汇总计数。到目前为止我的逻辑是:

代码语言:javascript
运行
复制
map<string,list<Event>> Date2Event = new map<string,list<Event>>();
for(Event e: eventLst){
    if(!Date2Event.containsKey(dateMapKey(e.CreatedDate))){
        Date2Event.put(dateMapKey(e.CreatedDate), new list<Event>());
    }
    Date2Event.get(dateMapKey(e.CreatedDate)).add(e);
}

public string dateMapKey(datetime dt){
    datetime myDt = dt;
    date myDate = myDt.date();
    date StartOfWeekDate = myDate.toStartOfWeek();
    string mapKey = StartOfWeekDate.format() + '-' + StartOfWeekDate.addDays(6).format();
    return mapKey;
}

所以我有一个函数,它基本上是用一个从开始日期到结束日期的字符串来设置地图的键。到目前为止,我所完成的是按周对事件进行分组。现在我需要更多地嵌套分组,并按周和按预订者分组,然后为该周的每个预订appt汇总计数。任何想法都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-12-21 06:16:03

过了一段时间,我终于决定了嵌套映射的最佳设计模式。我将在这里为其他人张贴我的答案,因为我得到的回应有时比所需的过于泛化。

代码语言:javascript
运行
复制
    map<string,map<string,map<string,decimal>>> mapData = new map<string,map<string,map<string,decimal>>>();
    //get all events
    for(Event e: eventLst){
        string dateKey = dateMapKey(e.CreatedDate);
        map<string,map<string,decimal>> bmap = new map<string,map<string,decimal>>();
        map<string,decimal> fieldMap = new map<string,decimal>();
        if(mapData.get(dateKey) != null){
            bmap = mapData.get(datekey);
            if(bmap.get(e.Booker__c) != null){
                fieldMap = bmap.get(e.Booker__c);
            }
        }
        decimal countShow=0,countNoShow=0,showPerc=0;
        if(fieldMap.get('countShow') != null){
            countShow = fieldMap.get('countShow');
        }
        if(fieldMap.get('countNoShow') != null){
            countNoShow = fieldMap.get('countNoShow');
        }
        if(fieldMap.get('countNoShow') != null && fieldMap.get('countShow') != null){
            showPerc = fieldMap.get('showPerc');
        }
        if(e.Booking_Status__c == 'Show'){
            countShow++;
        }
        if(e.Booking_Status__c == 'No Show'){
            countNoShow++;
        }
        showPerc = countNoShow != 0 ? (countShow / (countShow + countNoShow)* 100).setScale(1) : 0.0;
        map<string,decimal> fm = new map<string,decimal>();
        fm.put('countShow',countShow);
        fm.put('countNoShow',countNoShow);
        fm.put('showPerc',showPerc);
        map<string,map<string,decimal>> bm = new map<string,map<string,decimal>>();
        bm.put(e.Booker__c,fm);
        mapData.put(dateKey,bm);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53863078

复制
相关文章

相似问题

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