Go语言数组去重

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言数组去重相关的知识,希望对你有一定的参考价值。

参考技术A 在使用Go语言的时候,碰到了需要对数组进行去重操作的问题。Java语言有Set集合这个数据结构,可以很方便的将数组转为集合,但是Go语言没有Set,如果仅仅是因为去重操作就手动实现一个Set太繁琐了。可以根据Go语言中的map的特性来简单实现一下

这个是对字符串数组去重操作。可以根据需要的类型稍作修改即可。需要注意的是只支持可以作为map键的结构进行去重!

c语言中一个一维数组怎样去重?

我定义一个一维数组~~其中有重复的元素?请问应该怎样去重?

可以定义两个数组,将原来数组的不重复的数放到新数组中就可以了.(如果需要也可以释放原来数组的内存)#include <stdio.h> main() int a[5]=1,1,2,1,2; int i,j,k=0, b[5]=0; for(i=0;i<=4;i++) for(j=0;j<=4;j++) if(a[i]!=b[j]) b[k]=a[i];k++; printf("去重后的数组为:"); for(i=0;i<=k-1;i++) printf("a[i]=%d",a[i]); 参考技术A /*只是个例子 有改进的空间 buf可能不需要 */
/*空间换时间的办法可以用 位图bitmap来做 效率更高*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int a[]=0,1,0,2,3,1,5,7,2;

int func(int* array,int len)
int i=0,j=0;
int repeat=0;
int* buf=(int*)malloc(len*sizeof(int));
int* flag=(int*)malloc(len*sizeof(int));
memset(buf,0,len*sizeof(int));
memset(flag,0,len*sizeof(int));
for(i=0;i<len;i++)

repeat=0;
for(j=i+1;j<len;j++)
if(array[i]==array[j])
flag[j]=++repeat;



j=0;
for(i=0;i<len;i++)

if(flag[i]==0)

buf[j++]=array[i];


memcpy(a,buf,len*sizeof(int));
free(buf);
free(flag);
return j;


int main()

int newlen,i;
newlen=func(a,sizeof(a)/sizeof(int));
printf("new len %d \\r\\n",newlen);
for(i=0;i<newlen;i++)

printf("%d ",a[i]);

printf("\\r\\n");

参考技术B #include <stdio.h> #include <malloc.h> using namespace std ; bool isRepeat(int *arr,int len,int elem) for(int i = 0 ; i < len ; i++) if(arr[i]==elem) return true ; return false ; int* delRepeat(int *arr,int len) int *tar = (int*)malloc(sizeof(int)) ; int temp ; unsigned char i ; unsigned char j = 0 ; tar[j] = arr[0] ; for(i=1;i<len;i++) if(!isRepeat(tar,j+1,arr[i])) tar = (int*)realloc(tar,sizeof(int)*(j+2)) ; tar[++j] = arr[i] ; return tar ; int main() int a[5] = 1,2,2,3,3 ; int *b = delRepeat(a,5) ; return 0 ; 本回答被提问者采纳

以上是关于Go语言数组去重的主要内容,如果未能解决你的问题,请参考以下文章

c语言中一个一维数组怎样去重?

js的数组去重

c两个数组合并去重

2020-12-30 两个数组合并并去重对象

JS中数组重排序方法

数组去重的五个办法