C#_創建自己的MyList列表

定義一個數據自己的列表MyList ?使用上述描述列表的方式(數組) ?列表內也要定義屬于自己的方法 ?例如 Sort排序 Add添加 等等....

思路

┌─────────────────────────────────────────────────────────────────┐
│                    開始:實現 MyList<T> 泛型類                    │
└───────────────────────────────────┬─────────────────────────────┘↓
┌─────────────────────────────────────────────────────────────────┐
│                1. 定義核心成員(存儲與計數)                       │
│  ┌───────────────┐    ┌───────────────┐                         │
│  │  private T[] data  │    │  private int count  │              │
│  │  (內部存儲數組)  │    │  (實際元素數量)   │                  │
│  └───────────────┘    └───────────────┘                         │
└───────────────────────────────────┬─────────────────────────────┘↓
┌─────────────────────────────────────────────────────────────────┐
│                2. 實現基礎屬性(對外暴露信息)                    │
│  ┌────────────────────────┐  ┌────────────────────────┐         │
│  │  public int Capacity   │  │  public int Count      │         │
│  │  (獲取數組容量)      │  │  (獲取元素總數)      │         │
│  │  get { return data.Length; }  get { return count; }  │         │
│  └────────────────────────┘  └────────────────────────┘         │
└───────────────────────────────────┬─────────────────────────────┘↓
┌─────────────────────────────────────────────────────────────────┐
│                3. 實現核心功能方法                                │
├───────────────┬───────────────┬───────────────┬───────────────┐   │
│   Add(T item) │ Insert(...)   │ RemoveAt(...) │  IndexOf(...) │   │
│  (添加元素) │ (插入元素)  │ (刪除元素)  │ (查找索引)  │   │
├───────────────┼───────────────┼───────────────┼───────────────┤   │
│  LastIndexOf(...)  │   Sort()    │  索引器 [...]  │  KR()擴容   │   │
│  (反向查索引)    │ (排序)    │ (元素訪問)  │ (內部用)  │   │
└───────────────┴───────────────┴───────────────┴───────────────┘   │
└───────────────────────────────────┬─────────────────────────────┘↓
┌─────────────────────────────────────────────────────────────────┐
│                4. 支持高級特性(遍歷與初始化)                    │
│  ┌─────────────────────────────────┐  ┌─────────────────────┐   │
│  │  實現 IEnumerable<T> 接口        │  │  添加構造函數       │   │
│  │  - GetEnumerator()              │  │  - 接收 IEnumerable │   │
│  │  - 用 yield return 遍歷元素      │  │  - 批量添加元素     │   │
│  └─────────────────────────────────┘  └─────────────────────┘   │
└───────────────────────────────────┬─────────────────────────────┘↓
┌─────────────────────────────────────────────────────────────────┐
│                5. 測試驗證                                      │
│  - 集合初始化器:new MyList<int> {1,2,3}                       │
│  - foreach 遍歷元素                                             │
│  - 增/刪/查/改/排序功能驗證                                      │
└───────────────────────────────────┬─────────────────────────────┘↓
┌─────────────────────────────────────────────────────────────────┐
│                    結束:功能完成                                │
└─────────────────────────────────────────────────────────────────┘

首先定義一個 MyList<> 泛型類

 internal class MyList<T> : IEnumerable<T>{private T[] data = new T[0];private int count = 0;//數據個數public int Capacity //獲取或設置列表的容量{get { return data.Length; }}public void Add(T item){KR();data[count] = item;count++;}//添加數據public int Count //Count數據個數,不能set設置count值,放止外界修改{get{return count;}}// 集合初始化器構造函數public MyList(IEnumerable<T> collection)//collection代表集合 {}{foreach (var item in collection){Add(item);}}// 無參構造函數public MyList() { }#region 插入數據的方法 Insertpublic void Insert(int index, T item){if (index < 0 || index > count - 1){throw new IndexOutOfRangeException("索引參數超出范圍了");}KR();for (int i = count - 1; i > index - 1; i--){data[i + 1] = data[i];}data[index] = item;count++;}#endregion#region 擴容private void KR(){if (data.Length == 0){data = new T[4];}//添加元素前,判斷數組是否滿if (data.Length == count){T[] temp = new T[count * 2];for (int i = 0; i < data.Length; i++){temp[i] = data[i];}data = temp;}}#endregion#region 索引器 [index]//dx通過索引器訪問方法public T this[int index]{get{if (index < 0 || index > count - 1){throw new IndexOutOfRangeException("索引參數超出范圍了");}return data[index];}set{data[index] = value;}}#endregion #region 整數類型排序 Sortpublic void Sort(){bool isChange ;//標記排序是否完成int num = 0; //記錄交換次數for (int i = 0; i < count - 1; i++){isChange = false; // 每次外層循環開始時重置為falsefor (int j = 0; j < count - 1-i; j++){if ((dynamic)data[j] > (dynamic)data[j + 1]){T temp = data[j];data[j] = data[j + 1];data[j + 1] = temp;isChange = true;num++;}}if (isChange == false){ break; }}Console.WriteLine($"交換了:{num}次");}#endregion#region 索引刪除數據 RemoveAtpublic void RemoveAt(int index){if (index < 0 || index > count - 1){throw new IndexOutOfRangeException("索引參數超出范圍了");}for (int i = index; i < count-1; i++){data[i] = data[i + 1];            }count--;}#endregion#region 取得第一個對應元素所在列表中的索引位置 IndexOfpublic int IndexOf(T item){int index=-1;//定義一個索引值for (int i = 0; i < count; i++){if (item.Equals(data[i])){index=i;break;}}if (index == -1){Console.WriteLine("沒有要查找的數據");}return index;}#endregion#region 取得最后一個對應元素所在列表中的索引位置 LastIndexOfpublic int LastIndexOf(T item){int index = -1;//定義一個索引值for (int i = count-1; i >= 0; i--){if (item.Equals(data[i])){index = i; break;}}if (index == -1){Console.WriteLine("沒有要查找的數據");}return index;}#endregion#region 實現IEnumerable<T>接口,支持foreach遍歷public IEnumerator<T> GetEnumerator(){for (int i = 0; i < count; i++){yield return data[i];}}IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}#endregion}

主函數測試

  static void Main(string[] args){MyList <int> list= new MyList<int>() { 1,5,6,88};list.Add(1);list.Add(5);list.Add(3);list.Add(4);list.Add(9);list.Add(6);list.Insert(0, 9);//在索引為0的位置添加一個數據Console.WriteLine("取得第一個對應元素所在列表中的索引位置"+list.IndexOf(9));Console.WriteLine("取得最后一個對應元素所在列表中的索引位置" + list.LastIndexOf(9));//刪除索引位置在1的數據list.RemoveAt(1);//從小到大排序list.Sort ();Console.Write("列表數據包含:");foreach (int item in list){Console.Write(item + " ");}Console.WriteLine("元素個數:" + list.Count);}

注:IEnumerable<T>

IEnumerable<T>?是 C# 中定義在?System.Collections.Generic?命名空間下的泛型接口,用于表示一個可枚舉的集合。它是 .NET 集合框架中非常基礎且重要的接口,所有支持?foreach?循環遍歷?的集合都實現了這個接口(或其非泛型版本?IEnumerable)。

核心作用

  • 提供?統一的遍歷方式:無論集合內部結構如何(數組、鏈表、哈希表等),只要實現了?IEnumerable<T>,就能通過?foreach?循環遍歷元素。
  • 支持?延遲執行:配合 LINQ 時,可以實現查詢的延遲執行(只在真正需要結果時才計算),提高性能。

接口定義

IEnumerable<T>?接口非常簡單,只包含一個方法:

public interface IEnumerable<out T> : IEnumerable
{// 返回一個用于遍歷集合的枚舉器IEnumerator<T> GetEnumerator();
}

其中:

  • IEnumerator<T>?是另一個接口,負責實際遍歷邏輯,包含?MoveNext()(移動到下一個元素)、Current(獲取當前元素)等成員。
  • foreach?循環的本質就是調用?GetEnumerator()?獲取枚舉器,然后通過枚舉器遍歷元素。

例如,在 本代碼中添加以下實現:

using System.Collections;
using System.Collections.Generic;public class MyList<T> : IEnumerable<T>
{// 其他現有代碼...// 實現 IEnumerable<T> 接口public IEnumerator<T> GetEnumerator(){for (int i = 0; i < count; i++){yield return data[i]; // 逐個返回元素,支持 foreach 遍歷}}// 非泛型版本的實現(接口繼承要求)IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}
}

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

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

相關文章

記錄Linux下ping外網失敗的問題

最近在RK3568上進行開發測試&#xff0c;需要測試一下網絡環境&#xff0c;能否通過瀏覽器訪問外部網絡。測試情況如下&#xff1a; 1、ping內網、網關ip能ping通 2、ping外網ping不通 情況分析&#xff1a; 1、ping外網失敗&#xff08;ping 8.8.8.8也ping不通&#xff0c;說…

Redis 鍵值對操作詳解:Python 實現指南

一、環境準備 1. 安裝依賴庫 pip install redis2. 連接 Redis 數據庫 import redis# 創建 Redis 客戶端連接 r redis.Redis(hostlocalhost, # Redis 服務器地址port6379, # Redis 端口db0, # 數據庫編號&#xff08;0~15&#xff09;passwordNone, …

制造業企業大文件傳輸的痛點有哪些?

在全球化與數字化的浪潮下&#xff0c;制造業企業的大文件傳輸需求日益凸顯&#xff0c;然而諸多痛點也隨之而來&#xff0c;嚴重制約著企業的高效運營與發展。復雜網絡環境導致傳輸穩定性差制造業企業常涉及跨地域、跨國的業務合作與數據交流&#xff0c;網絡環境復雜多變。在…

低速信號設計之 MDIO 篇

一、引言? 在服務器的網絡子系統中,MDIO(Management Data Input/Output)總線雖然傳輸速率相對較低,卻扮演著極為關鍵的角色。它主要負責在 MAC(Media Access Control)層器件與 PHY(Physical Layer)層器件之間搭建起通信的橋梁,實現對 PHY 層器件的有效管理與狀態監控…

AR技術賦能航空維修:精度與效率的飛躍

在航空工業領域&#xff0c;飛機維修與裝配的精度要求越來越高。傳統的維修方法依賴人工操作和經驗判斷&#xff0c;容易產生誤差。隨著增強現實&#xff08;AR www.teamhelper.cn &#xff09;技術的引入&#xff0c;航空維修迎來了革命性的變化。本文將探討AR技術在航空維修中…

設計模式實戰:自定義SpringIOC(理論分析)

自定義SpringIOC&#xff08;理論分析&#xff09; 上一篇&#xff1a;設計模式開源實戰&#xff1a;觀察者模式不知道怎么用&#xff1f;手撕Spring源碼中跟著大佬學編程 上一篇我們研究了大佬在Spring源碼中使用的觀察者模式&#xff0c;今天我們再來聊聊Spring的核心功能—…

人工智能如何改變項目管理:應用、影響與趨勢

人工智能如何改變項目管理&#xff1a;應用、影響與趨勢1. 人工智能如何提升項目規劃與進度安排2. 人工智能在資源分配與優化中的應用3. 人工智能用于風險管理4. 人工智能用于團隊協作與交流5. 人工智能用于項目監控與報告6. 集成人工智能的項目管理軟件6.1 Wrike6.2 ClickUp6.…

【MySql】事務的原理

? 【MySql】事務的原理數據庫的隔離級別原理讀未提交讀已提交可重復讀&#xff08;Repeatable Read&#xff09;串行化&#xff08;最高的隔離級別&#xff0c;強制事務串行執行&#xff0c;避免了所有并發問題&#xff09;MVCC&#xff08;Multi-Version Concurrency Control…

YOLO--目標檢測基礎

一、基本認知1.1目標檢測的定義目標檢測&#xff08;Object Detection&#xff09;&#xff1a;在圖像或視頻中檢測出目標圖像的位置&#xff0c;并進行分類和識別的相關任務。主要是解決圖像是什么&#xff0c;在哪里的兩個具體問題。1.2使用場景目標檢測的使用場景眾多&#…

GitLab 18.2 發布幾十項與 DevSecOps 有關的功能,可升級體驗【四】

沿襲我們的月度發布傳統&#xff0c;極狐GitLab 發布了 18.2 版本&#xff0c;該版本帶來了議題和任務的自定義工作流狀態、新的合并請求主頁、新的群組概覽合規儀表盤、下載安全報告的 PDF 導出文件、中心化的安全策略管理&#xff08;Beta&#xff09;等幾十個重點功能的改進…

Python----大模型(大模型微調--BitFit、Prompt Tuning、P-tuning、Prefix-tuning、LORA)

一、大模型微調 1.1、解釋 微調(Fine-tuning)是在預訓練大模型基礎上&#xff0c;針對特定領域數據進行二次訓練的技術過程。這一過程使大型語言模型(如GPT、BERT等)能夠更好地適應具體應用場景&#xff0c;顯著提升在專業領域的表現。 1.2、微調的基本流程 模型選擇&#xf…

本地安裝 SQLite 的詳細步驟

方法 1:使用預編譯二進制文件 下載 SQLite: 訪問 SQLite 官方下載頁面。 下載 Precompiled Binaries for Windows 中的 sqlite-tools-win32-x86-*.zip。 解壓文件: 將下載的 ZIP 文件解壓到一個目錄(例如 C:\sqlite)。 配置環境變量: 右鍵「此電腦」→「屬性」→ 左側「高…

專題:2025醫藥生物行業趨勢與投融資研究報告|附90+份報告PDF、原數據表匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p43444 圈內人都知道&#xff0c;2024年的BioChina展會現場&#xff0c;某跨國藥企高管盯著融資展板喃喃自語&#xff1a;“去年A輪平均3.2億&#xff0c;今年怎么降到2.1億了&#xff1f;” 這個細節&#xff0c;恰是行業寒冬的縮影…

Chroma安裝教程

Chroma 這里講述的是windows環境 下載Chroma安裝包 下載地址&#xff1a;https://github.com/chroma-core/chroma/releases 運行 chroma-windows.exe run --port 8000通過心跳檢測訪問是否正常 http://localhost:8000/api/v2/heartbeat快速使用 python安裝chromadb pyth…

kali Linux 2025.2安裝教程(解決安裝失敗-圖文教程超詳細)

一&#xff0c;下載鏡像&#xff1a; 進入官網&#xff1a;Get Kali | Kali Linux &#xff0c;往下滑 等待兩年半&#xff0c;鏡像下載好。 二&#xff0c;虛擬機安裝&#xff1a; 轉&#xff1a;VMware Workstation Pro 17 安裝圖文教程 知乎平臺&#xff1a;VMware Work…

uniapp項目使用ucharts實現折線圖詳細講解(案例)

1.在Hbuildx里面的工具>插件安裝&#xff0c;進入DCloud搜索uchart 2.點擊對應的項目導入該插件 可以看到在該目錄下有該插件 3.進入官網演示 - uCharts跨平臺圖表庫&#xff0c;找一個示例代碼測試一下&#xff0c;是否可以成功應用 因為這里使用的是vue2&#xff0c;如果你…

數據分析師進階——95頁零售相關數據分析【附全文閱讀】

這份資料適合零售行業從業者&#xff0c;尤其是服裝銷售領域的人員&#xff0c;能幫大家用數據分析提升銷售業績。資料先提出 “店鋪 20 問”&#xff0c;引導思考店鋪運營問題&#xff0c;接著點明數據分析對提升銷售、找出銷售不佳原因的重要性 。詳細介紹銷售業績相關公式及…

計算機組成原理(6) - 加法器

加法器是數字電路中用于執行加法運算的基本邏輯單元&#xff0c;廣泛應用于計算機、計算器、數字信號處理器等電子設備中。它能將兩個二進制數相加&#xff0c;并輸出結果及可能產生的進位。一、加法器的基本功能加法器的基本功能是在數字電路中對輸入的二進制數執行加法運算&a…

Qt 與 WebService 交互開發

在現代軟件開發中&#xff0c;WebService 已成為實現跨平臺、跨語言通信的重要標準。Qt 作為一個強大的跨平臺框架&#xff0c;提供了完善的工具和類庫來實現與 WebService 的交互。本文將深入探討 Qt 與 WebService 交互開發的核心技術和實踐經驗&#xff0c;包括 SOAP 協議實…

LLM 模型部署難題的技術突破:從輕量化到分布式推理的全棧解決方案

大語言模型(LLM)的部署一直是工業落地的核心挑戰。動輒百億甚至萬億參數的模型規模,對硬件資源、推理速度和系統穩定性提出了嚴苛要求。本文將系統剖析 LLM 部署中的關鍵技術瓶頸,從模型壓縮、推理加速到分布式架構設計,提供可落地的工程化解決方案,并附具體實現代碼。 …