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
|
||
#代码块
|
||
#数据筛选 |