需要在另一个For循环内取出For循环

问题描述

在顶点中,我尝试在for循环内取出以下for循环。

如果Sobject记录,则下面的代码库是迭代列表。

 for(SObject sObj: listRecords){
      Map<String,Vals> RowsValsItemListMap = new Map<String,Vals>();
      List<Vals> ValsItemList = new List<Vals>();
      
      Map<String,Object> fieldsToValue = sObj.getPopulatedFieldsAsMap();
      system.debug('Value for is: fieldsToValue' +fieldsToValue);
      
      map01.put(sObj,fieldsToValue);
      
      for (String fieldName : fieldsToValue.keySet()){
          system.debug('Value for fieldName is: ' +fieldName);                  
          Vals ValsItem = new Vals();                    
          ValsItem.val = fieldsToValue.get(fieldName);                
          //ValsItem.val = (String)fieldsToValue.get(fieldName);                        
          RowsValsItemListMap.put(fieldName.toLowerCase(),ValsItem);                
      }                         
      

}

任何帮助都会得到真正的帮助。

解决方法

您的代码试图实现什么?您需要消除循环的原因是什么,您会遇到一些性能问题?

乍一看似乎很难优化,您似乎正在遍历所有行(对象)和所有列(填充的字段),例如,在进行CSV输出时很难优化此类内容。

但是仔细看,我会看到一些看起来像错误的东西。我们可以优化它们。问题是您是否真的想做这些事情。

  1. List<Vals> ValsItemList = new List<Vals>();-此变量似乎不在任何地方使用,而且-在每次迭代中都会重置。杀了吗?

  2. 下一件事:

    for(SObject sObj: listRecords){
        Map<String,Vals> RowsValsItemListMap = new Map<String,Vals>();
        // ... unimportant
    
        for (String fieldName : fieldsToValue.keySet()){
            // ... unimportant
    
            RowsValsItemListMap.put(fieldName.toLowerCase(),ValsItem);                
        }
    }
    

RowsValsItemListMap是外循环的局部变量。设置它没有意义,无论如何它在循环外都是不可见的。杀死它。如果在某些代码中需要它,则无需粘贴-查看您在做什么。您可以在每次迭代时重置变量。您可能刚刚删除了外循环,而仅对最后一个元素(listRecords]listRecords.size()-1])使用了内循环,结果相同。

  1. 这使我们只剩下map01.put(sObj,fieldsToValue);。我们不知道它的作用,并且可能是通过sObject索引地图的一个错误-如果您更改sObject中的字段,则地图的内部哈希键将会更改,并且您可能再也找不到元素了。如果确实需要-那么,您只需要外部循环即可,这就是您的最佳化。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...