Perl快捷删除数组重复元素,以前写过类似的博客,今天被问起时,却支支吾吾!

以前写过类似的博客: http://blog.csdn.net/three_man/article/details/34084361

今天拿出来,再好好剖析一下:

1. 构造一个含有重复元素的数组

my @arr1 = (1 .. 10);
my @arr2 = (5 .. 15);

# join multi array
my @arr = (@arr1, @arr2);

2. 删除数组中的重复元素

sub removeRepeat
{
    my $arrRef = shift;
    my %count = ();

    my @uniqArr = grep { ++$count{$_} == 1 } @$arrRef;

    return @uniqArr;
}
  • 定义一个计数哈希,并且初始化为空,即:my %count = ();

    该哈希%count的key为数组元素(即:上面代码中的$_),value为数组重复元素的计数(即:上面代码中的$count{$_}, 初始化值为0,并且该哈希通过key每获取一次value, value都会++)

  • 代码块{ ++$count{$_} == 1 }作为无重复元素的判断条件,并通过grep得到一个满足无重复元素的子数组

完整代码:

#!/usr/bin/perl -w

use strict;
use warnings;
use English;

my @arr1 = (1 .. 10);
my @arr2 = (5 .. 15);

# join multi array
my @arr = (@arr1, @arr2);

printArr(\@arr);
print "-------------------------------------\n";

my @uniqArr = removeRepeat(\@arr);
printArr(\@uniqArr);

# remove repeat element in array
sub removeRepeat
{
    my $arrRef = shift;
    my %count = ();

    my @uniqArr = grep { ++$count{$_} == 1 } @$arrRef;

    return @uniqArr;
}

# print array
sub printArr
{
    my $arrRef = shift;

    foreach my $element (@$arrRef)
    {
        print "$element\n";
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-26 18:05:49

Perl快捷删除数组重复元素,以前写过类似的博客,今天被问起时,却支支吾吾!的相关文章

javascript 笔试题之删除数组重复元素

笔试时紧张没写出来,静下心后发现简单的要死. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content=&quo

前端面试高频题:删除数组重复元素的多种方法

最近在想着换工作,去了一家中关村的上市公司,面试官随便问了几个问题其中就提到了怎么删除数组元素的方法,表示这已经是第三次遇到了这个问题了,由于知识口头说说所以就随便说了下,之前用的时候都是直接找的方法库虽然知道大致是怎么写的但是还没有真正写过,网上的方法还是蛮多的这里也给大家分享一个作者写的吧,希望对初学者有所帮助: //数组去重的方法 Array.prototype.unique=function(){ //集中声明变量 var oldArr=this, newArr=[oldArr[0]],

Js删除数组重复元素的多种方法

js对数组元素去重有很多种处理的方法,本篇文章中为网络资源整理,当然每个方法我都去实现了:写下来的目的是希望自己活学活用,下次遇到问题后方便解决. 第一种 1 function oSort(arr){ 2 var result={}; 3 var newArr=[]; 4 for(var i=0;i<arr.length;i++){ 5 if(!result[arr[i]]){ 6 console.log(result[arr[i]]); //看看输出的是什么 7 newArr.push(arr

JavaScript删除数组重复元素的5个高效算法

1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多写一些兼容低版本浏览器代码,源码如下: // 最简单数组去重法 function unique1(array){   var n = []; //一个新的临时数组   //遍历当前数组   for(var i = 0; i < array.length; i++){     //如果当前数组的

每日一题之LeetCode移除元素 删除有序数组重复元素

这两道题若是不使用官方题解的双指针做法,就会涉及到浅复制,深复制的问题,可参考如下https://blog.csdn.net/qq_32907349/article/details/52190796 .其中,此题将要使用深复制,但这会违背题意中的不开辟新的内存空间. 1.移除元素class Solution:def removeElement(self, nums, val):i = 0for j in range(0,len(nums)): if (nums[j] != val): nums[

算法-利用object的key唯一性删除数组重复项

# 利用object的key唯一性删除数组重复项 # uniq.html <!DOCTYPE html> <html lang="en"> <head>  <meta charset="UTF-8">  <title>Document</title>   <script type="text/javascript">        var arr=[12,34,2

[Js]删除数组指定元素

写在前面 在最近的项目中,有用到js对数组的操作,之前自己几乎没有用到这种方法,这里就记录一下,算是对学到的东西的一种总结吧. 数组对象splice方法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目.该方法会改变原始数组. 基本语法 arrayObject.splice(index,howmany,item1,.....,itemX)  参数说明 index:必需.整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置. howmany:必需.要删除的项目数量.

返回数组中的最大值和删除数组重复值-排序

//数组中最大值function getMax(arr){ //取该数组第一个值为最大值 var max=arr[0]; for(var i=0;i<arr.length;i++){ if(arr[i]>max){ max=arr[i] } } return max;} console.log(getMax([2,98,10,88])) /*--------------------------------------------------------------------*///删除数组重

26,27删除数组重复项

目录 26,27删除数组重复项 题目 双指针法 题26解法 题27解法一 题27解法二 26,27删除数组重复项 题目 题目26 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2. 你不需要考虑数组中超出新长度后面的元素. 题