微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决需要在另一个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中的字段,则地图的内部哈希键将会更改,并且您可能再也找不到元素了。如果确实需要-那么,您只需要外部循环即可,这就是您的最佳化。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。