--- title: 去重 updated: 2022-03-14 07:45:25Z created: 2022-01-10 03:35:59Z tags: - aad - aardio - 代码块 - 数据筛选 --- # 补充 table.unique(__) 可实现数组去重,算法复杂度未知 ``` table.unique(__) 对参数 @1 指定的数组去重 返回去重后的新数组 不修改原来的数组 ``` # 背景 从ADI官网爬取手册时遇到一个问题。同一器件具有多个子型号的情况非常普遍,子型号间的参数虽然不仅相同,但共享同一数据手册。 这就需要在合成下载链接前对这些器件名称进行去重处理,以免产生大量重复下载。 # 分析 经分析,此需求与“QQ号码去重问题”性质类似,可采用同一算法实现。 算法思想是利用数组的bit位保存数据中待处理的项,bit位对应的值0/1表示是否重复。 # 代码 本例采用aardio实现,表的键名对应待去重项,对应的键值代表重复次数。显示核心代码如下: ``` import console; var str = {"ad832";"ad830";"ad832"}//包含重复项的数据 var devlst = {} for(k,v in str){ devlst[v] = devlst[v]==null?1:devlst[v]+1; //稀疏数组 } console.varDump(devlst) for(k,v in devlst){ string.save("d:\tmp.txt", k ++ " " ++ v ++ '\r\n',true)//保存器件唯一名及重复次数 } console.pause(true); ``` 运行后结果如下: ``` 参数位置:1 数据类型:table 变量值: { ad830 = 1 ad832 = 2 } 请按任意键继续 ... ``` #aardio #代码块 #数据筛选