1.5 KiB
1.5 KiB
title | updated | created | tags | ||||
---|---|---|---|---|---|---|---|
去重 | 2022-03-14 07:45:25Z | 2022-01-10 03:35:59Z |
|
补充
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 #代码块 #数据筛选