66 lines
1.5 KiB
Markdown
66 lines
1.5 KiB
Markdown
|
---
|
|||
|
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
|
|||
|
#代码块
|
|||
|
#数据筛选
|