C# 數組與集合

C# 數組與集合

Array

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._1_Array
{internal class Program{static void Main(string[] args){int[] ints1 = { 1, 2, 3, 4, 5,6,7,8 };//將數組中指定位置的數據恢復為對應類型的默認值//參數1:需要恢復的數組 參數2:開始的位置的索引 參數3恢復的個數Array.Clear(ints1,1,3);MyWriteArr(ints1);int[] ints2 = new int[10];//將參數1數組中的數據復制到參數2數組匯總,由參數3指定復制的個數//注意:復制的個數不能超過源數組的長度, 2.復制的個數不能超過新數組的長度Array.Copy(ints1, ints2, 6);MyWriteArr(ints2);//反轉數組Array.Reverse(ints1);MyWriteArr(ints1);//查找對應的數據在數組中第一次出現的位置,有則返回當前數據的索引值,如果沒有則返回-1Console.WriteLine(Array.IndexOf(ints1,8));int[] ages = { 15, 12, 31, 18, 14, 19 };//根據傳入的數據和方法,返回第一個滿足條件的數據,如果數組中沒有滿足條件的數據,則返回該類型的默認值//工作原理:循環該數組,并且每次循環調用傳遞的方法,將當前的數據通過參數傳遞到方法中,如果方法返回了true,則Find直接返回這個參數Console.WriteLine(Array.Find(ages,FinSamll18));Console.WriteLine(Array.Find(ages,v=>v<18));//FindIndex() 返回滿足查詢條件的這個值的索引的位置Console.WriteLine(Array.FindIndex(ages, v => v < 18));//從后往前查詢第一個滿足條件的數據Console.WriteLine(Array.FindLast(ages, v => v < 18));Console.WriteLine(Array.FindLastIndex(ages, v => v < 18));//查詢所有滿足條件的數據 返回值是一個數組int [] arr = Array.FindAll(ages, v => v < 18);MyWriteArr(arr);//判斷數組中的數據是否都滿足條件//所有的數據都滿足條件 則返回true 有一個不滿足就返回falseConsole.WriteLine(Array.TrueForAll(ages, v => v < 18));//判斷數據中至少有一個滿足條件//有一個滿足條件就返回true 所有不滿足就返回falseConsole.WriteLine(Array.Exists(ages, v => v < 18));string[] str1 = { "老李", "老王", "老五" };string[] str2 = new string[5];//將str1復制到str2中 從str2的位置開始放str1.CopyTo(str2,1);//獲取指定維度的數據的數量,返回值是32位的整數Console.WriteLine(str1.GetLength(0));//等同于  str1[0] ="老王";str1.SetValue("老王",0);Console.WriteLine(str1.GetValue(0));//判斷書中是否存在某個數據Console.WriteLine(str1.Contains("老王"));}public static void MyWriteArr(int[] arr){string s = "[";for (int i = 0; i < arr.Length; i++){s += arr[i] + ",";}s += "]";Console.WriteLine(s);}public static bool FinSamll18(int value){//if (value<18)//{//    return true;//}//else//{//    return false;//}return value < 18;}}}

C#集合(Collection)

C# 中的集合類(Collection)是專門用于數據存儲和檢索的類,類中提供了對棧(stack)、隊列(queue)、列表(list)和哈希表(hash table)的支持。大多數集合類都實現了相同的接口。

集合類的用途多種多樣,例如可以動態的為元素分配內存、根據索引訪問列表項等等,這些類創建 Object 類的對象集合,Object 類是 C# 中所有數據類型的基類。

C# 中的集合類型

在 System.Collections.Generic,System.Collections.Concurrent 和 System.Collections 命名空間下提供了許多集合類型,每種集合類型都有特定的用途,下面以 System.Collection 命名空間為例,該命名空間下提供的集合類型如下表所示:

描述和用法
動態數組(ArrayList)動態數組表示可被單獨索引的對象的有序集合。 動態數組基本上與數組相似,唯一不同的是動態數組可以使用索引在指定的位置添加和移除項目,動態數組會自動重新調整自身的大小。 另外,動態數組也允許在列表中進行動態內存分配、增加、搜索、排序等等。
List類似ArrayList,只是List只能存儲相同類型的數據,List的長度也不是固定的
字典(Dictionary)類似List.只能存儲固定類型的數據,長度不固定
哈希表(Hashtable)哈希表可以使用鍵來訪問集合中的元素。 哈希表中的每一項都由一個鍵/值對組成,鍵用于訪問集合中的指定項。
排序列表(SortedList)排序列表是數組和哈希表的組合,可以使用鍵或索引來訪問列表中的各項。 排序列表中包含一個可使用鍵或索引訪問各項的列表,如果您使用索引訪問各項,則它是一個動態數組,如果您使用鍵訪問各項,則它就是一個哈希表。 另外,排序列表中的各項總是按鍵值進行排序的。
堆棧(Stack)堆棧代表了一個后進先出的對象集合。 當您需要對各項進行后進先出的訪問時,則可以使用堆棧。為堆棧中添加一項稱為推入項目,從堆棧中移除一項稱為彈出項目。
隊列(Queue)隊列代表了一個先進先出的對象集合。 當您需要對各項進行先進先出的訪問時,則可以使用隊列。為隊列中添加項目稱為入隊,為隊列中移除項目稱為出隊。

C# ArrayList:動態數組

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._2_ArrayList
{internal class Program{static void Main(string[] args){//ArrayList 動態數組 就是不給固定長度和存儲的數據的類型的集合//可以存儲任意類型的數據,并且長度會隨著數組內容的增加減少進行改變ArrayList list1 =new ArrayList() { "老王",1,true,new int[] {1} };Console.WriteLine(list1.Count);Console.WriteLine(list1[0]);//向ArrayList的尾部添加數據list1.Add("老李");int[] ints = { 666, 777, 888 };//將另一個集合的內容添加到ArrayList的尾部list1.AddRange(ints);//清空數組,刪除動態數組所有的數據,并將Count重置為0list1.Clear();list1.Add("老李");//在指定的索引位置插入數據list1.Insert(1, "老王");//在指定的位置插入集合的內容list1.InsertRange(2, ints);Console.WriteLine(list1.Contains("老李"));//從數組中截取對應的數據,返回值是一個新的ArrayList//參數1:開始的索引 參數2:截取的個數list1.GetRange(1,3);Console.WriteLine(list1.IndexOf("老李"));list1.Remove("老李");list1.RemoveAt(1);list1.RemoveRange(1,2);for (int i = 0; i < list1.Count; i++){Console.WriteLine(list1[i]);}}}
}

C# List:泛型集合

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._3_List
{internal class Program{static void Main(string[] args){//List 也是一個集合 類似ArrayList 只是List只能存儲相同類型的數據,List的長度也是不固定//格式: List<數據類型> 變量名=new List<數據類型>();List<int> list = new List<int>();Console.WriteLine(list[0]);Console.WriteLine(list.Count);list.Add(1);list.Remove();list.RemoveAt();list.Reverse();//.....}}
}

C# Dictionary 字典

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._4_Dictionary
{internal class Program{static void Main(string[] args){//Dictionary:類似List 只能存儲固定類型的數據 長度不固定//list使用索引進行數據的操作,字典使用"鍵"進行數據的操作//鍵:標識 在一個字典中 鍵是唯一的 并且不能為null//  Dictionary<鍵的數據類型,值的數據類型> 變量名 = new Dictionary<鍵的數據類型,值的數據類型>();Dictionary<string,int> keyValuePairs = new Dictionary<string, int>(){{"name",32423 },{"k",1 },{"aa",1232 }};keyValuePairs.Add("a", 1);Console.WriteLine(keyValuePairs.Count);Console.WriteLine(keyValuePairs["k"]);keyValuePairs["k"] = 132;Console.WriteLine(keyValuePairs.ContainsKey("a"));Console.WriteLine(keyValuePairs.ContainsValue(1));}}
}

C# Hashtable:哈希表

在 C# 中,Hashtable(哈希表) 類表示根據鍵的哈希代碼進行組織的鍵(key)/值(value)對的集合,可以使用鍵來訪問集合中的元素。也就是說當您需要使用鍵來訪問指定元素時,可以選擇使用哈希表。

Hashtable 類中的屬性

下表中列出了 Hashtable 類中一些常用的屬性:

屬性描述
Count獲取哈希表中包含的鍵值對的個數
IsFixedSize獲取一個值,用來表示哈希表是否具有固定大小
IsReadOnly獲取一個值,用來表示哈希表是否只讀
Item獲取或設置與指定鍵關聯的值
Keys獲取一個 ICollection,其中包含哈希表中的鍵
Values獲取一個 ICollection,其中包含哈希表中的值

Hashtable 類中的方法

下表中列出了 Hashtable 類中一些常用的方法:

方法名描述
public virtual void Add(object key, object value)向哈希表中添加一個帶有指定的鍵和值的元素
public virtual void Clear()從哈希表中移除所有的元素
public virtual bool ContainsKey(object key)判斷哈希表是否包含指定的鍵
public virtual bool ContainsValue(object value)判斷哈希表是否包含指定的值
public virtual void Remove(object key)從哈希表中移除帶有指定的鍵的元素

C# SortedList:排序列表

在 C# 中,SortedList 類用來表示鍵/值對的集合,這些鍵/值對按照鍵值進行排序,并且可以通過鍵或索引訪問集合中的各個項。

我們可以將排序列表看作是數組和哈希表的組合,其中包含了可以使用鍵或索引訪問各項的列表。如果您使用索引訪問各項,那么它就是一個動態數組(ArrayList),如果您使用鍵訪問各項,那么它就是一個哈希表(Hashtable)。另外,集合中的各項總是按鍵值進行排序。

SortedList 類的中的屬性

下表列出了 SortedList 類中一些常用的屬性:

屬性描述
Capacity獲取或設置排序列表中可包含的元素個數
Count獲取排序列表中的元素個數
IsFixedSize判斷排序列表是否具有固定大小
IsReadOnly判斷排序列表是否只讀
Item獲取或設置排序列表中指定鍵所關聯的值
Keys獲取一個包含排序列表中所有鍵的集合
Values獲取一個包含排序列表中所有值的集合

SortedList 類的中的方法

下表列出了 SortedList 類中一些常用的方法:

方法名描述
public virtual void Add(object key, object value)向排序列表中添加一個帶有指定的鍵和值的元素
public virtual void Clear()從排序列表中移除所有的元素
public virtual bool ContainsKey(object key)判斷排序列表中是否包含指定的鍵
public virtual bool ContainsValue(object value)判斷排序列表中是否包含指定的值
public virtual object GetByIndex(int index)獲取排序列表中指定索引處的值
public virtual object GetKey(int index)獲取排序列表中指定索引處的鍵
public virtual IList GetKeyList()獲取排序列表中的鍵
public virtual IList GetValueList()獲取排序列表中的值
public virtual int IndexOfKey(object key)返回排序列表中指定鍵的索引,索引從零開始
public virtual int IndexOfValue(object value)返回排序列表中指定值第一次出現的索引,索引從零開始
public virtual void Remove(object key)從排序列表中移除帶有指定鍵的元素
public virtual void RemoveAt(int index)移除排序列表中指定索引處的元素
public virtual void TrimToSize()將排序列表的容量設置為排序列表中元素的實際個數

C# Stack:堆棧

在 C# 中,堆棧(Stack)類表示一個后進先出的對象集合,當您需要對項目進行后進先出的訪問時,則可以使用堆棧。向堆棧中添加元素稱為推入元素,從堆棧中移除元素稱為彈出元素。

Stack 類中的屬性

下表列出了 Stack 類中一些常用的屬性:

屬性描述
Count獲取堆棧中包含的元素個數
IsSynchronized判斷是否同步對堆棧的訪問(線程安全)
SyncRoot獲取可用于同步對堆棧訪問的對象

Stack 類中的方法

下表列出了 Stack 類中一些常用的方法:

方法名描述
public virtual void Clear()從堆棧中移除所有的元素
public virtual bool Contains(object obj)判斷某個元素是否在堆棧中
public virtual object Peek()返回在堆棧頂部的對象,但不移除它
public virtual object Pop()移除并返回在堆棧頂部的對象
public virtual void Push(object obj)向堆棧頂部添加一個對象
public virtual object[] ToArray()復制堆棧到一個新的數組中

C# Queue:隊列

在 C# 中,隊列(Queue 類)與堆棧類似,它代表了一個先進先出的對象集合,當您需要對項目進行先進先出訪問時,則可以使用隊列。向隊列中添加元素稱為入隊(enqueue),從堆棧中移除元素稱為出隊(deque)。

Queue 類中的屬性

下表列出了 Queue 類的一些常用的屬性:

屬性描述
Count獲取隊列中包含的元素個數
IsSynchronized判斷是否同步對隊列的訪問(線程安全)
SyncRoot獲取可用于同步對隊列訪問的對象

Queue 類中的方法

下表列出了 Queue 類的一些常用的方法:

方法名描述
public virtual void Clear()從隊列中移除所有的元素
public virtual bool Contains(object obj)判斷某個元素是否在隊列中
public virtual object Dequeue()移除并返回在隊列開頭的對象
public virtual void Enqueue(object obj)向隊列的末尾處添加一個對象
public virtual object[] ToArray()復制隊列到一個新的數組中
public virtual void TrimToSize()將隊列的容量設置為隊列中元素的實際個數
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._6_Stack和Queue
{internal class Program{static void Main(string[] args){//聲明一個堆棧Stack<string> stack = new Stack<string>();//添加一個數據stack.Push("a");//刪除一個數據(只能刪除最后的那個數據)stack.Pop();//獲取堆棧中最上層的數據Console.WriteLine(stack.Peek());Console.WriteLine(stack.ToArray());stack.Clear();Queue<string> queue = new Queue<string>();//入隊queue.Enqueue("a");Console.WriteLine(queue.Dequeue());}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713967.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GenAI助力DevOps,塑造軟件工程的未來

自 2022 年以來&#xff0c;GenAI 無疑已成為一種普遍的技術趨勢。在本文中&#xff0c;我們將探索 DevOps 中令人興奮的 GenAI 領域&#xff0c;討論其潛在優勢、局限性、新興趨勢和最佳實踐&#xff0c;深入了解 AI 支持的 DevOps 前沿世界&#xff0c;并探索這一強大組合如何…

ObjectFactory學習

簡介 在Spring框架中&#xff0c;ObjectFactory是一個功能接口&#xff0c;它定義了一個簡單的方法來獲取對象的實例。ObjectFactory接口通常用于工廠模式和依賴注入中&#xff0c;允許延遲對象創建和配置&#xff0c;以及在運行時動態地決定要返回的對象實例。 源碼 Functi…

Laravel Octane 和 Swoole 協程的使用分析二

又仔細研究了下 Octane 源碼和 Swoole 的文檔&#xff0c;關于前幾天 Laravel Octane 和 Swoole 協程的使用分析中的猜想&#xff0c;得到進一步驗證&#xff1a; Swoole 的 HTTP Server 啟動后會創建一個 master 進程和一個 manager 進程&#xff1b;master 進程又會創建多個…

智能咖啡廳助手:人形機器人 +融合大模型,行為驅動的智能咖啡廳機器人(機器人大模型與具身智能挑戰賽)

智能咖啡廳助手&#xff1a;人形機器人 融合大模型&#xff0c;行為驅動的智能咖啡廳機器人(機器人大模型與具身智能挑戰賽) “機器人大模型與具身智能挑戰賽”的參賽作品。的目標是結合前沿的大模型技術和具身智能技術&#xff0c;開發能在模擬的咖啡廳場景中承擔服務員角色并…

常用備注(記錄中...)

文章目錄 docker測試網絡可達性檢查端口是否開放PgSql docker docker logout IP地址:端口號 docker login IP地址:端口號橋接模式bridge啟動容器 docker run -d -p 外部端口號:內部端口號(配置文件中的端口號) --name 容器名稱 -v /data/docker/conf/application.yml:/app/con…

javaWebssh在線授課輔導系統myeclipse開發mysql數據庫MVC模式java編程計算機網頁設計

一、源碼特點 java ssh在線授課輔導系統是一套完善的web設計系統&#xff08;系統采用ssh框架進行設計開發&#xff09;&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用 B/S模式開發。開發環境為TOMCAT7.…

4.Java---方法+重載

方法 方法的調用是需要開辟內存的,方法調用結束內存就被銷毀了. 下面將介紹一個經典的錯誤標準的0分的示意! 我們日常中寫交換兩個數字的代碼的時候都會用如下的方法進行描述: 你是不是覺得自己寫的特別對!終于可以獨立寫一個小小的函數了? 下面運行一下看看結果 哦莫!怎么…

autoware.universe中所有的多傳感器融合代碼解讀,一看就懂!

目錄 融合的前提條件case1:vision_roi與cluster融合融合過程case2:vision_roi與centerPoint融合融合過程小結:case3:vision_roi與pointcloud融合融合過程總結融合的前提條件 計算視覺ROI話題的時刻T1(時間戳獲得) 計算激光雷達話題的時刻T2,并將T2加上設定的偏差時間間隔in…

C# DataTable 對象操作

實現DataTable按字段進行分類、按列數據匯總、序列化對象數組、所有字段轉小寫、動態對象數組、數據分頁 分類DataTableClassfiy實體&#xff1a; /// <summary>/// 單個分類表/// </summary>public class DataTableClassfiy{/// <summary>/// 分類名稱/// &…

springboot第61集:Jenkins-Boss萬字挑戰,一文讓你走出微服務迷霧架構周刊

名詞 CONTAINER ID&#xff08;容器ID&#xff09; 名詞 IMAGE ID&#xff08;鏡像ID&#xff09;cat /etc/os-release //查看系統信息 pwd //查看當前路徑 ls //查看當前目錄文件 docker -v //查看docker版本 docker-compose up -d //在后臺運行&#xff08;取消-d是在控制臺運…

linux系統Jenkins工具添加自由項目和maven項目

Jenkins添加自由項目 添加自由項目操作流程代碼遠程代碼郵件標題郵件正文 添加maven項目準備環境操作流程 添加自由項目 gitlab配置基本代碼頁面等&#xff0c;拉取代碼&#xff0c;打包&#xff0c;發布操作流程 代碼 遠程代碼 echo ssh root192.168.188.177 "tar cz…

EasyExcel 自適應列寬、隱藏列、動態列、單元格下拉框選擇數據、單元格文本格式

前言 項目中用到EasyExcel讀寫Excel&#xff0c;用到了一下功能&#xff0c;這里做個筆記&#xff1a; 列寬自適應&#xff1a;自適應寬度隱藏列&#xff1a;隱藏某些列動態列&#xff1a;固定列 動態的生成Excel列單元格下拉框選擇數據&#xff1a;設計單元格下拉數據&…

深搜,LeetCode 2368. 受限條件下可到達節點的數目

一、題目 1、題目描述 現有一棵由 n 個節點組成的無向樹&#xff0c;節點編號從 0 到 n - 1 &#xff0c;共有 n - 1 條邊。 給你一個二維整數數組 edges &#xff0c;長度為 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示樹中節點 ai 和 bi 之間存在一條邊。另給你一個整數…

WPF的DataGrid設置標題頭

要設置DataGrid標題頭的分割線、背景色和前景色等屬性&#xff0c;您可以使用DataGrid的樣式和模板來自定義標題頭的外觀。下面是詳細解釋以及示例代碼&#xff1a; 分割線設置&#xff1a; 您可以使用DataGrid.ColumnHeaderStyle樣式中的BorderThickness和BorderBrush屬性來設…

Java基礎-java開發入門

(創作不易&#xff0c;感謝有你&#xff0c;你的支持&#xff0c;就是我前行的最大動力&#xff0c;如果看完對你有幫助&#xff0c;請留下您的足跡&#xff09; 目錄 一、什么是Java 二、Java語言的特點 三、什么是JDK 四、第一個Java程序 一、什么是Java Java是由Sun …

electron nsis 安裝包 window下任務欄無法正常固定與取消固定

問題 win10系統下&#xff0c;程序任務欄在固定后取消固定&#xff0c;展示的程序內容異常。 排查 1.通過論壇查詢&#xff0c;應該是與app的api setAppUserModelId 相關 https://github.com/electron/electron/issues/3303 2.electron-builder腳本 electron-builder…

二月打戲最燃的國漫推薦,斗羅大陸2上榜,吞噬星空堪稱第一

2024年開年&#xff0c;國漫就給我們帶來了很大的驚喜&#xff0c;在剛剛過去的2月&#xff0c;有幾部中出現了超燃的打戲&#xff0c;看得人熱血沸騰。尤其是科幻番《吞噬星空》中的一場1V1對決&#xff0c;特效和設計都堪稱第一。還有哪些國漫上榜呢&#xff1f;下面就一起來…

TCP為什么要三次握手?

TCP三次握手協議是為了在不可靠的互聯網環境中可靠地建立起一個連接&#xff0c;三次握手可以確保兩端的發送和接收能力都是正常的。 那么&#xff0c;為什么是三次而不是二次或四次握手呢&#xff1f; 為什么不是二次握手&#xff1f; 如果是二次握手&#xff0c;即客戶端發…

網絡編程 io_uring

io_uring 1、概述 io_uring是Linux&#xff08;內核版本在5.1以后&#xff09;在2019年加入到內核中的一種新型的異步I/O模型&#xff1b; io_uring使用共享內存&#xff0c;解決高IOPS場景中的用戶態和內核態的切換過程&#xff0c;減少系統調用&#xff1b;用戶可以直接向…

vue + cesium初始化地圖 + 鼠標經過地圖(點、線等其他實體)樣式

vue cesium初始化地圖 鼠標經過地圖&#xff08;點、線等其他實體&#xff09;樣式 export function initMap(mapViewer) {Cesium.Ion.defaultAccessToken "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0OTUzOGJhMy1iNzVjLTQwZjItYWYyNy03YjA4MjM0YWE2MWMiLCJpZ…