1. 程式人生 > >Perl技巧 兩個陣列的取交集,並集與補集

Perl技巧 兩個陣列的取交集,並集與補集

利用perl 對兩個陣列進行操作。 目的是取2個數組只屬於各自的元素,以及2個數組的共同元素。(可見下圖)


程式碼:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my @a = (1,2,3,4,5,6,7,8,);
my @b = (1,9,0,4,15,6,12,8);
my %hash_a = map{$_=>1} @a;
my %hash_b = map{$_=>1} @b;
my %merge_all = map {$_ => 1} @a,@b;
my @a_only = grep {!$hash_b{$_}} @a;
my @b_only = grep {!$hash_a{$_}} @b;
my @common = grep {$hash_a{$_}} @b;
my @merge = keys (%merge_all);
print "A only :\n";
print Dumper(\@a_only);
print "B only :\n";
print Dumper(\@b_only);
print "Common :\n";
print Dumper(\@common);
print "Merge :\n";
print Dumper(\@merge);


執行結果 :

[email protected]:/home/dxxu>{76}perl array_operation.pl
A only :
$VAR1 = [
          2,
          3,
          5,
          7
        ];
B only :
$VAR1 = [
          9,
          0,
          15,
          12
        ];
Common :
$VAR1 = [
          1,
          4,
          6,
          8
        ];
Merge :
$VAR1 = [
          '6',
          '3',
          '7',
          '9',
          '12',
          '2',
          '15',
          '8',
          '1',
          '4',
          '0',
          '5'
        ];



相關推薦

Perl技巧 陣列交集補集

利用perl 對兩個陣列進行操作。 目的是取2個數組只屬於各自的元素,以及2個數組的共同元素。(可見下圖) 程式碼: #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @a = (1,2,3

python list 求交集

pytho 列表解析 int __main__ class clas etc intersect run def diff(listA,listB): #求交集的兩種方式 retA = [i for i in listA if i in listB]

python list 獲取交集的方法

交集 spa 兩個 方法 val inter tmp for col 1. 獲取兩個list 的交集 #方法一: a=[2,3,4,5] b=[2,5,8] tmp = [val for val in a if val in b] print tmp #[2, 5] #

javaList的交集差異

public static void main(String[] args) { List list1 =new ArrayList(); list1.add("1111"); list1.add("2222"); list1.add("3333"); lis

list的交集

1. 獲取兩個list 的交集 1 2 3 4 5 6 7 8 9 #方法一: a=[2,3,4,5] b=[2,5,8] tmp = [val for

java 對list進行“交集去重複”的操作

@Test public void testTwoList(){ List<String> a = new ArrayList<String>(); List<

關於如何獲取列表的交集分享一個簡單高效的方法

lt1=[1,3,5,7,9] lt2=[1,5,7,6,4] #交集 print(list(set(a).intersection(set(b)))) #並集 print(list(set(a).union(set(b)))) #相當於是吧兩列表相加然後轉集合去重在轉列表 lt3=lt

集合的交集如何計算

string[] arr1 = { "445345", "fsdfsdf", "423423", "123" }; string[] arr2 = { "123", "Fsdfs

【C++】判斷元素是否在vector中對vector去重vector求交集

bool iostream space col 求交集 uniq AI void print #include <iostream> #include <vector> #include <algorithm> //sort函數、交並補

求AB陣列交集和差

注意函式自身是否有元素重複的判斷,還有要把switch函式放在最後面,小細節。  還有一個小細節就是函式呼叫直接寫,前面不要在加cout; cout>>chaji(a,b,n);就會在結尾多出來一個數,為迴圈次數。 #include<iostream&

python功能二維表合併一維表內嵌元祖合併以及交集

1 二維列表和列表內有元祖的合併方法: from itertools import chain a = [[1],[2],[3]] b = [("1"),("2"),("3")]#不能為int型別 print list(chain.from_iterable(a))# =

java-----求list的交集、和差

 List list1 =new ArrayList();  list1.add("1111");  list1.add("2222");  list1.add("3333");  List list2 =new ArrayList();  list2.add("3333"

Java中多集合的交集和差

一、交集  java中交集使用 A.retainAll(B) ,交集的結果在集合A中。 public class Intersection { @Test public void testSet() { Set<String>

求List,Map,Set的交集

應用場景   在大資料的背景下,我們在做專案的時候往往使用單表在資料庫中查詢資料,然後多表在service層進行關聯操作。比如說下面的情況就是如此,在這裡我並不是展開講多表之間如何實現解耦的單表查詢操作,我只是針對其中的涉及多表關聯的集合操作進行講解

js拼接字串用逗號隔開 ;陣列不同

1. js拼接字串,用逗號隔開 //用jquery function getTextByJquery() { var str = ""; //遍歷name為txt的所有input元素 $("input[name='txt']").each(function () {

如何利用selenium+python獲取click()方法後 請求返回的結果 包含: javascript 陣列操作正則表示式匹配返回陣列js陣列再去重 by qiweb 2018

技術交流q and v信:908701702  ,熊貓燒香 qiweb2018 python程式碼思路【開啟網頁--定位元素--點選請求--獲取請求後伺服器返回的資訊】: # coding=utf-8 from selenium import webdriver from

【LeetCode】 350. 陣列交集 II

1.題目 給定兩個陣列,編寫一個函式來計算它們的交集。 2.思路 此題對第一題的區別在於可以輸出相同數字 例如:輸入【1,2,2,1】,【2,2】;輸出【2,2】 step1:遍歷兩個向量; step2:把兩個陣列重複的元素加入到vector res中(可以

【LeetCode】 349. 陣列交集

1.題目 給定兩個陣列,編寫一個函式來計算它們的交集。 2.思路 step1:遍歷兩個向量; step2:把重複的元素加入到set中(set不重複) step3:返回set對應的vector 注意:陣列1、2為空集的時候,直接返回空集 3.程式碼 vec

陣列交集 II [JS]

給定兩個陣列,編寫一個函式來計算它們的交集。 示例 1: 輸入: nums1 = [1,2,2,1], nums2 = [2,2] 輸出: [2,2] 示例 2: 輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出: [4,9] 說明: 輸出結果中每個元

資料結構:求有序列表的交集

1.求兩個有序列表的交集 LNode* Intersection(LNode* La,LNode* Lb) { if (La==NULL||Lb==NULL) { return NULL; } LNode *pCHead = NULL; //A與B交集頭 LNode *pCE