首页 > 其他分享 >优化函数迭代每次都要查找的代码

优化函数迭代每次都要查找的代码

时间:2023-09-01 19:26:32浏览次数:43  
标签:const 迭代 caseInfo 代码 dimensionName item 查找 result time

在做Perfeye需求的时候,有写了一个函数,每次遍历,要根据相同的时间,把对应的数据整合

刚开始用findIndex 进行每次查找,但是性能很差,后面问了gpt有没有什么操作能不用findIndex,gpt说可以单独存储时间索引值来进行判断

旧代码

const getFTimeDataSetSourceData = () => {
    const result: { [x: string]: number; }[] = []
    //Todo 等待优化
    // 遍历 caseInfoList 中的每个 case
    for (const caseInfo of caseInfoList) {
      const caseData = caseInfo.dataList;
      const dimensionName = caseInfo.dimensionName;
      caseData.forEach(item => {
        const len = item.FTime?.length || 0;
        const splitTime = 1000 / len;
        item.FTime?.forEach((t, idx) => {
          const _time = item.time + round(idx * splitTime)
          const _timeIndex = result.findIndex(item => item.time === _time)
          if (_timeIndex === -1) {
            result.push({
              time: _time,
              [dimensionName]: t
            })
          } else {
            result[_timeIndex][dimensionName] = t
          }
        })
      });

    }
    return result
  }

新代码

const getFTimeDataSetSourceData = useMemoizedFn(() => {
    const result: { [x: string]: number; }[] = []
    const timeIndexMap: { [x: number]: number; } = {}; // 存储时间索引的对象

    for (const caseInfo of caseInfoList) {
      const caseData = caseInfo.dataList;
      const dimensionName = caseInfo.dimensionName;
      caseData.forEach(item => {
        const len = item.FTime?.length || 0;
        const splitTime = 1000 / len;
        item.FTime?.forEach((t, idx) => {
          const _time = item.time + round(idx * splitTime)
          if (timeIndexMap[_time] === undefined) {
            // 时间索引不存在,将其添加到结果数组中,并更新时间索引对象
            result.push({
              time: _time,
              [dimensionName]: t
            });
            timeIndexMap[_time] = result.length - 1;
          } else {
            // 时间索引已存在,直接更新结果数组中对应的值
            result[timeIndexMap[_time]][dimensionName] = t;
          }
        })
      });

    }
    return result
  })

今日问gpt,又学到了一招

标签:const,迭代,caseInfo,代码,dimensionName,item,查找,result,time
From: https://www.cnblogs.com/qisexin/p/optimize-the-code-to-iterate-every-time-you-look-for-dgf

相关文章

  • 记录一种代码设计规范
    看源码的时候看到一种写法,FSM继承了IFsm和FsmBase,而使用的时候有的地方用接口,有的地方用抽象类: 有点疑惑,为啥不把IFsm和FsmBase合成一个类,后来看到了一种代码规范: 传参数的时候用IFsm,返回值用FsmBase。......
  • git不同分支同步代码,打patch补丁
    背景介绍一个代码管理者,不可避免的就是要将别人修改的代码同步到其他分支或其他仓库分支,因为不是所有人都有权限去合并的。合并代码有很多方式,比如直接文件夹覆盖、文件覆盖等。但上面的方法,繁琐还容易出错。写shell脚本也可以实现。这里主要想说,可以把内核打补丁的方法,......
  • 无涯教程-Flutter - 编写IOS代码
    访问iOS特定代码与Android平台上的代码相似,不同之处在于它使用iOS特定语言-Objective-C或Swift和iOSSDK。下表显示了如何在Android和iOS平台上接收Dart值。dartandroidiosnullnull无(嵌套时为NSNull)booljava.lang.BooleanNSNumbernumberWithBool:intjava.lang.Int......
  • C#访问SQLite完整增删改查代码
    文章转载自:https://wobushixiaohai.blog.csdn.net/article/details/117804179?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-117804179-blog-103633083.235%5Ev38%5Epc_relevant_anti_vip_base&depth_1-u......
  • Python雪花代码
    目录系列文章前言 小海龟雪花类 画雪花 移动函数 前言 用python画个雪花玩玩,完整代码在公众号Want595免费领取哈。小海龟老生常谈啦,在用python画樱花树前,我们先来了解一下turtle吧!小海龟(Turtle)是Python中画图的一个重要的包(内置包),里面包含丰富的画图工具以及画图的各种功能,......
  • 纯js实现以下代码
    题目<ul><li>1<li><li>2<li><li>3<li></ul>代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"con......
  • 程序员的线性代数教程!Jupyter 代码和视频可能更适合你
    红色石头的个人博客:www.redstonewill.com推荐一份适合程序员的线性代数教程,包含理论和源码。教程地址为:https://github.com/fastai/numerical-linear-algebra本教程的重点是以下问题:我们如何以可接受的速度和可接受的精度进行矩阵计算?这份教程来自于旧金山大学的分析学硕士2017暑......
  • 使用 Node-RED 构建 DolphinDB 低代码平台
    前言DolphinDB是由浙江智臾科技有限公司研发的一款高性能分布式时序数据库,集成了功能强大的编程语言和高容量高速度的流数据分析系统,为海量结构化数据的快速存储、检索、分析及计算提供一站式解决方案。DolphinDB数据库支持每秒百万级数据写入,万亿级别数据毫秒级查询响应,以及高压......
  • [代码随想录]Day33-动态规划part01
    题目:509.斐波那契数思路:动规五部曲:这里我们要用一个一维dp数组来保存递归的结果确定dp数组以及下标的含义dp[i]的定义为:第i个数的斐波那契数值是dp[i]确定递推公式为什么这是一道非常简单的入门题目呢?因为题目已经把递推公式直接给我们了:状态转移方程dp[i]=dp[i-......
  • svnWebUI svn服务端web 开源代码版本控制系统 图形化管理系统
    svn是Subversion的简称,是一个开源的代码版本控制系统,svn就是用于多人共同开发同一个项目,达到资源共用目的工具。版本控制是什么?版本控制(Revisioncontrol)是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。可记录每个版本的信息,方便问题追踪。同时版本控制......