兩個集合對比

来源:https://www.cnblogs.com/axzxs2001/archive/2019/10/08/11637113.html
-Advertisement-
Play Games

在GitHub上有個項目,本來是作為自己研究學習.net core的Demo,沒想到很多同學在看,還給了很多星,所以覺得應該升成3.0,整理一下,寫成博分享給學習.net core的同學們。 項目名稱:Asp.NetCoreExperiment 項目地址:https://github.c... ...


在GitHub上有個項目,本來是作為自己研究學習.net core的Demo,沒想到很多同學在看,還給了很多星,所以覺得應該升成3.0,整理一下,寫成博分享給學習.net core的同學們。

項目名稱:Asp.NetCoreExperiment

項目地址:https://github.com/axzxs2001/Asp.NetCoreExperiment

 

今天先分享幾個對集合知識點。

兩個集合對比代碼:

GitHub代碼庫(https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/Common/CompareCollections

 1         static void Main(string[] args)
 2         {
 3             var leftKes = new List<string>() { "111111", "222222", "333333", "444444" };
 4             var rightKes = new List<string>() { "333333", "444444", "555555", "666666" };
 5 
 6             Console.WriteLine("Left集合");
 7             Console.WriteLine(string.Join(',', leftKes));
 8             Console.WriteLine("-------------------------------------");
 9 
10             Console.WriteLine("Right集合");
11             Console.WriteLine(string.Join(',', rightKes));
12             Console.WriteLine("-------------------------------------");
13 
14             Console.WriteLine("Left多的 ");
15             Console.WriteLine(string.Join(',', leftKes.Except(rightKes)));
16             Console.WriteLine("-------------------------------------");
17 
18             Console.WriteLine("Right多的 ");
19             Console.WriteLine(string.Join(',', rightKes.Except(leftKes).ToList()));
20             Console.WriteLine("-------------------------------------");
21 
22             Console.WriteLine("Left和Right交集 ");
23             Console.WriteLine(string.Join(',', rightKes.Intersect(leftKes)));
24             Console.WriteLine("-------------------------------------");
25 
26             Console.WriteLine("Left和Right並集 ");
27             Console.WriteLine(string.Join(',', leftKes.Union(rightKes)));
28             Console.WriteLine("-------------------------------------");
29 
30             Console.WriteLine("Left和Right對稱差集 ");
31             Console.WriteLine(string.Join(',', leftKes.Union(rightKes).Except(rightKes.Intersect(leftKes))));
32             Console.WriteLine("-------------------------------------");
33 
34         }

 

運行速度測試代碼:

GitHub代碼庫(https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/Common/CSharp%E8%8E%B7%E5%8F%96%E4%B8%A4%E4%B8%AA%E9%9B%86%E5%90%88%E4%B8%AD%E7%9B%B8%E5%90%8C%E7%9A%84%E5%92%8C%E4%B8%8D%E5%90%8C%E7%9A%84%E7%BB%93%E6%9E%9C

 1         static void Test()
 2         {
 3             Console.WriteLine("-------------------開始初始化集合-------------------");
 4             #region 製造數據
 5             var watch = new Stopwatch();
 6             watch.Start();
 7             var listA = new List<string>();
 8             var listB = new List<string>();
 9             for (int i = 0; i < 1000000; i++)
10             {
11                 var id = Guid.NewGuid().ToString();
12                 listA.Add(id);
13             }
14             listB.AddRange(listA);
15             //製造B的差異數據
16             for (int i = 0; i < 10; i++)
17             {
18                 var tick = DateTime.Now.Ticks;
19                 var random = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
20                 var index = random.Next(1, 100000);
21                 listB[index] = Guid.NewGuid().ToString();
22             }
23             watch.Stop();
24             TimeSpan span = watch.Elapsed;
25             Console.WriteLine("製造數據總共花費{0}ms.", span.TotalMilliseconds);
26             #endregion
27 
28             #region 比較
29             Console.WriteLine("-------------------開始比較-------------------");
30             Console.WriteLine("-------------------listA中交集外---------------------");
31             watch = new Stopwatch();
32             watch.Start();
33             var listD = listA.Except(listA.Intersect(listB));
34             watch.Stop();
35             span = watch.Elapsed;
36             Console.WriteLine("listA中交集外 總共花費{0}ms.", span.TotalMilliseconds);
37             foreach (var item in listD)
38             {
39                 Console.WriteLine(item);
40             }
41             Console.WriteLine("----------------------listB中交集外--------------------");
42             watch = new Stopwatch();
43             watch.Start();
44             var listE = listB.Except(listA.Intersect(listB));
45             watch.Stop();
46             span = watch.Elapsed;
47             Console.WriteLine("listB中交集外 總共花費{0}ms.", span.TotalMilliseconds);
48             foreach (var item in listE)
49             {
50                 Console.WriteLine(item);
51             }
52             Console.WriteLine("--------------listA和listB中交集外-------------------");
53             watch = new Stopwatch();
54             watch.Start();
55             var listF = listA.Concat(listB).Except(listA.Intersect(listB));
56             watch.Stop();
57             span = watch.Elapsed;
58             Console.WriteLine("listA和listB中交集外 總共花費{0}ms.", span.TotalMilliseconds);
59             foreach (var item in listF)
60             {
61                 Console.WriteLine(item);
62             }
63             #endregion
64         }

對比的運行時長結果:

我的配置是:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 直接訪問redis的中國官網,在下載部分,可以看到安裝和使用的方式。wget http://download.redis.io/releases/redis-5.0.4.tar.gztar xzf redis-5.0.4.tar.gzcd redis-5.0.4make./src/redis-ser ...
  • xml即可擴展標記語言,它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。 本文主要學習的ElementTree是python的XML處理模塊,它提供了一個輕量級的對象模型。在使用ElementTree模塊時,需要import xml.etree.ElementTre ...
  • 在學習Python的是後遇到點小問題,記錄下來以後忘了再來看看。 一. python2 和python3在繼承父類的時候是不同的。super() 是一個特殊的函數,幫助Python將父類和子類關聯起來。在Python3中,直接使用如下代碼: Python3 在Python2中有兩種方法: 第一種 第 ...
  • Python 入門 之 反射 通過字元串操作對象的屬性和方法 對象的角度使用反射 類的角度使用反射 當前模塊使用反射 其他模塊使用反射 反射的應用場景 ...
  • ``` include int main(void) { int arr[10]={5,4,7,9,2,3,1,6,10,8}; //定義一個位排序的數組 int i; //定義迴圈次數 int n = 0; //定義排序次數 int length=10; //定義數組長度 while(n arr[ ...
  • 一、random模塊 random模塊是用來生成隨機數的。 練習:生成隨機驗證碼 import random def v_code(): code = '' for i in range(5): num=random.randint(0,9) alf=chr(random.randint(65,90 ...
  • 介面表示一種能力,實現了一個介面,即擁有一種能力。 BeanDefinition與Bean的關係, 就好比類與對象的關係. 類在spring的數據結構就是BeanDefinition.根據BeanDefinition得到的對象就是我們需要的Bean. 我認為理解Bean與BeanDefinition ...
  • @EnableAutoConfiguration註解是Spring Boot中配置自動裝載的總開關。本文將從@EnableAutoConfiguration入手,嘗試分析Spring Boot對@AutoConfigurationImportSelector註解的處理過程。 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...