数组去重的方法

字符串去重跟数组去重大同小异,将字符串转成数组即可使用数组去重方法。

1.ES6去重:

原理:es6新的数据结构Set类似于数组,但成员的值都是唯一的,可用于数组去重。

function unique(array) {
  const result = [...new Set(array)]
  console.log(result)
}
unique([1,2,2,3,4,5,5,5])

2.ES5:

function unique(array) {
        var result = [];
        for(var i = 0; i < array.length; i++) {
            if (result.indexOf(array[i]) == -1) {//没有出现过
                result.push(array[i]);
            }
        }
        console.log(result.toString());
    }
    unique([1,2,3,4,3,4,5,6,6,7]);

 

3.哈希表方式:

function unique(arr){  
    var hash = [], result = [],item;  //申请一个哈希表,一个结果
    hash[arr[0]]=1;  //第一个肯定不会重复,放在哈希表中
    for (var i=1;i<arr.length ;i++ )  
    {  
        if(hash[arr[i]]===undefined){  //没有定义,就是没有重复的
            hash[arr[i]]=1  
        }  
    }  
    for (item in hash) {  
        result.push(item);  
    }  
    console.log(result.toString());  
  
}  
unique([20,50,20,40,50,10,20]); 

 过滤器去重

var arr3 = ['h', 'e', 'l', 'l', 'o', '2', 1, 2, 1, 3, 2];
       function noRepeat3(arr) {
            var newArr = [];
            newArr = arr.filter(function (item, index, array) {
             //利用下标 先得出原数组元素中的索引再与下标进行匹配  
             //相等则返回true 添加到新数组newArr中 当循环出相同元素不会与下标相同 返回false忽略
                return array.indexOf(item) == index; 
            });

            return newArr;
        }
        var result3 = noRepeat3(arr2);
        console.log(result3);  // [ "h", "e", "l", "o", "2", 1, 2, 3 ]

很多时候,我们查询出来的数据需要去重的,而且是有条件地去重和排序,虽然大部分的时候可以自己绞尽脑汁写个sql去达到目标。例如我们需要某一列不重复,而且需要其他的某列值是最大或最小,特别是其他列的数据来源于其他的表,这时候写sql的难度就大大的增加了。 
如果用HashMap就不用考虑那么多问题。我们只需要写一个查询排好序sql, 
然后把结果循环put进map里面就可以啦,去重的字段就作为key值,value值按需输入就可以。


当然HashMap还能用于生成多个随机码的时候避免重复。 
随机码生成有很小的概率会重复,但不代表不会出现特别是数据量很大的时候。一般避免重复的方法就是放到某个容器里面例如list、Map等,然后contains(xxx)查找重复,用if语句去判断是否插入进去然后再去生成。 
如下两层循环去生成下去

for(int i=0;i<codeMaxCount;i++){
             code =getRandom(XX);
             while(map.containsKey(code)){
                 code = getRandom(XX);
         }
    map.put(code, code);        
}

当然HashMap的contains(xxx)用于查找效率比list的高。 
上面的用法忽略了HashMap去重的特性 
其实可以这样使用

while(map.size()<codeMaxCount){
         code = getRandom(XXX);
         map.put(code, code);
        }

一层循环搞定,不用查找判断。

set和multiset都是基于红黑树实现的,其中查找、删除和插入操作都只需要O(logk)时间。 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值