isDuplicated

语法

isDuplicated(X, [keep=FIRST])

参数

X 是一个向量或包含多个等长向量的元组。

keep 是一个常量,表示系统处理多个重复值的方式。它的取值可以是 FIRST, LAST 或 NONE。它是一个可选参数,默认值为 FIRST。

详情

判断向量中是否包含重复值。如果 X 是一个向量,返回的结果是一个与 X 长度相同的布尔向量。如果 X 是一个元组,返回的结果是一个与 X 中每个元素等长的布尔向量。

如果输入向量中有多个重复值,

  • keep 的取值为 FIRST 表示,返回结果中第一个重复值对应位置的值为 false,其他重复值对应位置的值为 true。

  • keep 的取值为 LAST 表示,返回结果中最后一个重复值对应位置的值为 false,其他重复值对应位置的值为 true。

  • keep 的取值为 NONE 表示,返回结果中所有重复值对应位置的值都为 true。

例子

下面通过一个例子说明 keep 参数不同取值的区别。

v = [1,3,1,-6,NULL,2,NULL,1]
isDuplicated(v,FIRST);
//output:[false,false,true,false,false,false,true,true]
// 1在向量 v 中出现了三次,所在的位置是第0、第2和第7位,由于 isDuplicated 的第二个参数为 FIRST,因此返回结果中第0位为 false,第2和第7位为 true。

v = [1,3,1,-6,NULL,2,NULL,1]
isDuplicated(v,LAST);
//output:[true,false,true,false,true,false,false,false]
// 1在向量 v 中出现了三次,所在的位置是第0、第2和第7位,由于 isDuplicated 的第二个参数为 LAST,因此返回结果中第7位为 false,第0和第1位为 true。

v = [1,3,1,-6,NULL,2,NULL,1]
isDuplicated(v,NONE);
//output:[true,false,true,false,true,false,true,true]
// 1在向量 v 中出现了三次,所在的位置是第0、第2和第7位,由于 isDuplicated 的第二个参数为 NONE,因此返回结果中第0、第1位和第7位都为 true。

isDuplicated 函数可以去除表中的重复记录。

t=table(1 2 4 8 4 2 7 1 as id, 10 20 40 80 40 20 70 10 as val);
t;
id val
1 10
2 20
4 40
8 80
4 40
2 20
7 70
1 10
select * from t where isDuplicated([id,val],FIRST)=false;
// 保留第一条重复的记录,去除表中其他重复的记录
id val
1 10
2 20
4 40
8 80
7 70

下例展示 isDuplicated 判断 BLOB 类型数据。

a=[blob("s1"), blob("s2")]
isDuplicated(a)
//output: [false, false]

a1=[blob("s1"), blob("s2"), blob("s1"), blob("s2")]
isDuplicated(a1)
//output: [false, false, true, true]