1. 程式人生 > >perl:利用hash和grep去除陣列中的冗餘元素

perl:利用hash和grep去除陣列中的冗餘元素

如果我們有一個數組@array=(1,2,2,3,3,3,4,4,4,4),我們怎麼去除陣列中的冗餘元素呢?我們可以利用hash與grep()做到這一點。
use strict;
my @array=(1,2,2,3,3,3,4,4,4,4);
my %hash; #定義一個空hash
my @result=grep {++$hash{$_}==1} @array; #去除冗餘元素
print “@result”;

grep能遍歷@array中的元素(用$_表示)。以@array中元素2為例,第一次$_==2時,++$hash{$_}==1;二次$_==2時,++$hash{$_}==2。所以、$hash{1}只能為1,$hash{2}可能值為1和2,$hash{3}的值可能為1,2和3,依次類推。
grep {++$hash{$_}==1} @array 篩選出了@array中的元素第一次出現時的情況,當此元素再次出現時,就被過濾掉了。

如果grep {++$hash{$_}==2 } @array 能篩選出什麼元素呢?答案是2,3,4。也就是至少出現過兩次的元素,因為$hash{1}沒有機會等於2的。

上述內容可以用於任何用途並且不必表明出處。水平有限,歡迎批評指正,共同進步。

相關推薦

perl:利用hashgrep去除陣列元素

如果我們有一個數組@array=(1,2,2,3,3,3,4,4,4,4),我們怎麼去除陣列中的冗餘元素呢?我們可以利用hash與grep()做到這一點。 use strict; my @array=(1,2,2,3,3,3,4,4,4,4)

c++ 去除陣列重複的元素

for(int i=0;i<len;i++) { for(int j=i+1;j<len;j++) { if(x[j]==x[i]) { for(int k=j+1;k

去除陣列所有重複元素

//去除陣列中重複元素 var arr = [0,2,3,1,5,5,8,8,2,1,10,10,43,43]; var json = {}; for (var i = 0; i < arr.length; i++) { if (!json[arr[i]]) {

去除陣列的重複元素-JAVA

要求:去除二維陣列中的重複元素思路:試試不用集合的方式去重複元素,首先我想到的是需要一個去重後儲存元素的新陣列,然後在兩層巢狀迴圈,外層遍歷原陣列,內層逐一判斷是否和後面的元素重合,然後在存入新陣列。(這時候會出現一個問題,請往下看!)// 1、去除陣列中重複的元素 pub

去除陣列的重複元素

#include<vector> #include<algorithm> #include<iostream> using namespace std; int Unique(int array[],int arrayLength){ int length=1; //去除

js去除陣列的重複元素去除陣列相鄰的重複元素

//去除陣列的重複元素 Array.prototype.distinct = function(){ var $ = this; var o1 = {}; var o2 = {}; var o3 = []; var o; for(var i=0;o = $[i]

MergeSort歸併排序利用歸併排序計算出陣列的逆序對

  首先先上LeetCode今天的每日一題(面試題51. 陣列中的逆序對):   在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數。 //輸入: [7,5,6,4] //輸出: 5 示例1   由於題目中已經給出陣列長度為: 0

echarts 怎樣去掉白色邊框線 怎樣去除背景的網格

.com www. src charts 分享圖片 nbsp chart 白色 load echarts怎樣去掉白色邊框線: echarts怎樣去除背景中的網格線 echarts 怎樣去掉白色邊框線 和怎樣去除背景中的網格

利用pandasnumpy計算表每一列的均值

import numpy as np import pandas as pd df = pd.DataFrame({'var1':np.random.rand(100), #生成100個0到1之間的隨機數 'var2':100,

java去除兩個陣列相同的元素

import java.util.*; /** * 陣列去重 * <p> * Created by Cheung on 2016/4/14. */ public class Test01 { public static void main(String[] args)

去除陣列重複資料

public class DeleteDuplicate {     public static void main(String[] args) {         int[] array = new int

JS去除陣列重複元素

var arr =["2017-12", "2017-12", "2017-12", "2018-02", "2018-02", "2018-02", "2018-02", "2018-02", "20

iOS 去除陣列重複資料的幾種方法

第一種:利用NSDictionary的AllKeys(AllValues)方法 程式碼: NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",

【刷題】去除陣列唯一重複的數

題意:一個數組,裡面只有一個重複的數,找出這個重複的數,並考慮時間複雜度。 分析: 1,如果去過該陣列是存在某個範圍之內,且佔滿了該範圍,只多了一個數,如陣列有101個數,數的範圍是[1, 100]。就是說該陣列中的數包含了1到100所有的數,且第101個數也是在[1, 100]範圍內的

matlab cell(元胞陣列)關於元胞陣列的深入理解 元胞陣列個別元素的刪除

深入理解元胞陣列 matlab 中的 cell 其實也是個陣列,不過一個cell變數後邊既可以接小括號“()”,又可以接大括號"{}",這有什麼區別呢? 在 matlab 中,所有的陣列都可以用“(i)”來表示其中的第i個元素,元胞陣列還可以用“{i}”,表示第i個cel

隨筆-去除陣列某個元素(將陣列val移到後面去,並不改變其他元素的相對順序)

題目: 給定一個數組 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。 示例: 輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0] 說明: 必須在原陣列上操作,不能拷貝額外的陣列。 儘量減少操作次數。 思路:定義一個n

JS去除陣列的無效值(空,undefined, null, false)

1.Array.filter() arr.filter(item => item) 2.也可以通過遍歷判斷陣列, 空字元,undefined, null, false 轉化為布林型別都是 false; let arr=[1, , null, false, undefined,

利用filter()函式,巧妙地去除Array的重複元素

利用filter()函式,巧妙地去除Array中的重複元素 題目出自廖雪峰老師的JavaScript教程: 利用filter()函式,巧妙地去除Array中的重複元素: 'use strict'; var r; var arr = ['apple', 'strawberry', 'b

jq從陣列刪除指定元素(根據自定義條件) 超好用的 $.grep() 方法 jQuery.grep()

  轉: jQuery.grep() 什麼是jQuery.grep()?   jQuery.grep()是一個查詢滿足過濾函式的陣列元素的函式。原始陣列不受影響,返回值為陣列。 用法介紹: 寫法: jQuery.grep( array, function(elementOfArr

利用dupdup2在linux實現簡單的重定向輸出

Linux中檔案描述符 0代表標準輸入檔案stdin、1代表標準輸出檔案stdout、2代表標準錯誤輸出檔案stderr,STDOUT_FILENO是一個巨集 為1 #include<stdio.h> #include<unistd.h> #include<s