請教 如果在亂數數組中 挑選出不一樣的數據

 

請教高手們 我有一數組呈亂數形態 如何挑選出 所有不一樣的數據

比如 a[1,3,5,3,5,7,5,8] 修改成a[1,3,5,7,8]

 
Hung Wen Lin:

請教高手們 我有一數組呈亂數形態 如何挑選出 所有不一樣的數據

比如 a[1,3,5,3,5,7,5,8] 修改成a[1,3,5,7,8]

用HashSet

  #include <Generic\HashSet.mqh>
 
手动写就是做个数组,数字池,遍历一次,不一样就进池,相同就过,输出数字池
 
Xiaoyu Huang #:

用HashSet

HashSet並沒有適用的指令

我的狀況是亂數數組 a[x,y,z,y,x] 需要修改成a[x,y,z] 順序不重要 只需挑選出不一樣的數值

 
Hung Wen Lin #:

HashSet並沒有適用的指令

我的狀況是亂數數組 a[x,y,z,y,x] 需要修改成a[x,y,z] 順序不重要 只需挑選出不一樣的數值

集合(set)是一个数据结构,它由一组无序且唯一(即不能重复)的项组成。

集合可以用来存储各种类型的数据,例如数字、字符串、对象等。

 
Xiaoyu Huang #:

意思是説 我只需將a[x,y,z,x,y] 逐一使用HashSet.add指令將x y z x y加入集合

Set集合只會留下 x y z 是這樣嗎

 
Hung Wen Lin #:

意思是説 我只需將a[x,y,z,x,y] 逐一使用HashSet.add指令將x y z x y加入集合

Set集合只會留下 x y z 是這樣嗎

是的

 
int a[] = {1,3,5,3,5,7,5,8};
int uniqueArray[];

for(int i = 0; i < ArraySize(a); i++)
  {
   if(!ArrayIsExist(uniqueArray, a[i]))
     {
      ArrayResize(uniqueArray, ArraySize(uniqueArray) + 1);
      uniqueArray[ArraySize(uniqueArray) - 1] = a[i];
     }
  }



for(int i = 0; i < ArraySize(uniqueArray); i++)
  {
   Print(uniqueArray[i]);
  }
 
Hung Wen Lin:

請教高手們 我有一數組呈亂數形態 如何挑選出 所有不一樣的數據

比如 a[1,3,5,3,5,7,5,8] 修改成a[1,3,5,7,8]

首先设头尾两个指针,然后从头开始比较中间的数。

当中间的数与头部相同,将中间的数与尾部交换,尾指针前移一位。

当中间指针与尾指针相同,头指针进一位,开始比较第二个数。


简单概括就是,有相同的数就交换到尾部,数组长度减一。