前言:漫长的国庆长假终于快结束了,我们该工作的工作了,该学习的学习了,该干什么的也都开始了,这篇博客我主要说一下C#中集合的使用,也就是ArrayList集合和Hashtable字典集合的使用,我在这里说的主要还是简单的使用,使学习的能够很快的学习集合然后自己研究集合的一些高级用法,在最后还列举出了一些常用的小案例。

  1. ArrayList

(1) 命名空间 System.Collection

(2)创建对象

1)增

->Add

->AddRange  任何一个集合对象

int[] num = { 1, 2, 3, 4, 5, 6 };

ArrayList arr = new ArrayList();

//ICollection一个对象里面包含很多其他对象

arr.AddRange(num);

->Insert

2)删

->Remove

->RemoveAt

->Clear

3)改

->像数组一样通过索引来修改

4)查

->Contains

->IndexOf

  1. 自定义集合

(1) 集合是Object类型,处理数据的时候会需要强转等操作

(2)举例说明:

1)新建一个Person类class Person{public string Name { get; set; }public int Age { get; set; }public char Gender { get; set; }public Person(string n, int a, char g){Name = n;Age = a;Gender = g;}public void SayHello(){Console.WriteLine("我叫{0}", Name);}}2)新建一个PeresonCollection类class PersonCollection{ArrayList arr = new ArrayList();public void Add(Person p){arr.Add(p);}public void AddRange(params Person[] ps){arr.AddRange(ps);}public Person this[int index]{get { return (Person)arr[index]; }}public int Count{get { return arr.Count; }}}3)在main方法中实现static void Main(string[] args){PersonCollection ps = new PersonCollection();ps.Add(new Person("韩迎龙", 23, '男'));ps.Add(new Person("韩全龙", 16, '男'));ps.Add(new Person("泛亚内", 16, '男'));ps.Add(new Person("野田", 16, '男'));for (int i = 0; i < ps.Count; i++){ps[i].SayHello();}Console.ReadKey();}   

(3)定义索引

1)就是一个通过传进来的参数访问内部数据的一个属性(带有参数的属性)

2)public 返回类型 this[索引参数类型 参数名]

{

get{return 通过参数访问的数据;}

set{通过参数处理要修改的数据=value}

}

案例说明:

class Arr{int[] nums = { 10, 23, 34, 45, 56 };public int this[int index]{get {if (index > nums.Length - 1){throw new Exception("索引超出异常");}return nums[index];}set { nums[index] = value; }}public int Count{get { return nums.Length; }}}class IndexString{int num = 10;string str = "字符串韩迎龙";char ch = 'c';public int this[int index]{get { return num; }}public string this[string str]{get { return this.str; }}public char this[char c]{get { return ch; }}public string this[int n, char c, string s]{get { return num + str + ch; }}}class Program{static void Main(string[] args){IndexString IS=new IndexString();Console.WriteLine(IS[' ']);Console.WriteLine(IS[0, ' ', " "]);Console.ReadKey();}}

3)模拟实现集合

class MyCllection{ArrayList arrInt = new ArrayList();ArrayList arrStr = new ArrayList();ArrayList obj=new ArrayList();public void Add(string key, object obj){int index = arrStr.Add(key);arrInt.Add(index);this.obj.Add(obj);}public object this[int index]{get { return obj[index]; }}public object this[string key]{get { return obj[arrStr.IndexOf(key)]; }}}static void Main(string[] args){MyCllection mc = new MyCllection();mc.Add("HYL", "韩迎龙");mc.Add("HYL", "韩全龙");Console.WriteLine(mc[0]);Console.WriteLine(mc["HYL"]);Console.ReadKey();}

  1. foreach语法

    (1) 执行

1)可以只遍历一部分吗?  不能

2)可以倒着遍历吗?      不能

3)举例说明:

int[] nums = { 1, 4, 6, 87, 87, 3, 23, 45 };

foreach (int item in nums)

{

Console.WriteLine(item);

}

Console.ReadKey();

(2)数据源应该是一个可枚举的类型(IEnumerable)

(3)foreach循环的步骤

1)foreach循环首先到数据集中调用GetEnumerator方法得到枚举器对象

2)到in关键字,调用MoveNext()方法

3)这个方法返回bool值,将枚举器移到数据集的下一个数据上,并检查是否有数据,如果有,返回true,否则返回false

4)到临时变量(迭代变量),开始调用枚举器的Current属性,将当前的数据取出来,然后赋值给临时变量

5)就可以使用了

  1. 嵌套类

(1) 有时候在某个类型中需要一个特定的类型处理数据,而这个类型只在当前对象类中可使用

(2)可以将这个类定义在一个类的里面,此时称为嵌套类

(3)嵌套类的访问修饰符和一般成员一样

(4)一般是为了考虑安全问题

  1. yield迭代器

(1) 一般的语法:yield return 数据

(2)foreach在执行开始访问数据集的时候,依旧是调用IEnumerable中的GetEnumerator方法

(3)这个Getenumerator方法可以使用这个迭代器返回数据

(4)在方法中写上循环,循环体上放上yield,那么循环不会立即结束

(5)每当执行到yield的时候就会停在那里,跳到foreach中

(6)foreach执行到in的时候,又会跳到上次停留的yield那里,继续向下执行

(7)直到下一个yield,再次调用foreach

public IEnumerator GetEnumerator()

{

for(int i=0;i<arr.Count;i++)

{

yield return arr[i];

}

}

  1. Hashtable 字典集合

(1) 举例说明:

Hashtable has = new Hashtable();

has.Add("BigBoss", "韩迎龙");

has.Add("sdd", "的事实");

has.Add("dfd", "的速度");

Console.WriteLine(has["BigBoss"]);

(2)Hashtable的使用,实现一个电子词典

class Program{static void Main(string[] args){string[] words = File.ReadAllLines("英汉词典TXT格式.txt", Encoding.Default);Hashtable has = new Hashtable();for (int i = 0; i < words.Length; i++){string[] temp = words[i].Split(new char[] { ' '}, StringSplitOptions.RemoveEmptyEntries);if (temp.Length == 1){continue;}string key = temp[0];string value = string.Join(" ", temp, 1, temp.Length - 1);if (!has.ContainsKey(key)){has.Add(key, value);}else{has[key] = string.Format("{0}\n{1}", has[i], value);}}//可以查看了while (true){Console.Write("请输入单词?");string str=Console.ReadLine();if (has.ContainsKey(str)){Console.WriteLine(has[str]);}else{Console.WriteLine("很抱歉,你说查询的词汇没有找到");}}Console.ReadKey();}}static void Main(string[] args){string[] words = File.ReadAllLines("英汉词典TXT格式.txt", Encoding.Default);Hashtable has = new Hashtable();for (int i = 0; i < words.Length; i++){string[] temp = words[i].Split(new char[] { ' '}, StringSplitOptions.RemoveEmptyEntries);string key = temp[0];string value = temp[1];if (temp.Length != 2){continue;}if (!has.ContainsKey(key)){has.Add(key, value);}else{has[key] = string.Format("{0}\n{1}", has[i], value);}}//可以查看了while (true){Console.Write("请输入单词?");string str=Console.ReadLine();if (has.ContainsKey(str)){Console.WriteLine(has[str]);}else{Console.WriteLine("很抱歉,你说查询的词汇没有找到");}}Console.ReadKey();}}

(3)如何遍历?

static void Main(string[] args){Hashtable has = new Hashtable();has.Add("1", "韩迎龙");has.Add("2", "得到");//仅仅遍历keyforeach (string item in has.Keys){Console.WriteLine(item);}//遍历valueforeach (string item in has.Values){Console.WriteLine(item);}//遍历整个集合foreach (DictionaryEntry item in has){Console.WriteLine("{0}是{1}", item.Key, item.Value); ;}Console.ReadKey();}

(4)var 类型推断

1)var val=数据;

2)赋什么数据就是什么类型

3)类型确定以后就不能变了

4)必须保证类型赋值时时确定的

5)何时使用类型推断

->匿名类型

static void Main(string[] args){var person = new { Name = "张三", Age = 23, Gender = '男' };Console.WriteLine(person.Name);Console.WriteLine(person.Age);Console.WriteLine(person.Gender);Console.ReadKey();}

->Linq查询

static void Main(string[] args){int[] nums = { 132, 454, 667, 343, 65, 76, 74 };var query = from n in numswhere n > 100 && n < 500select n;foreach (var item in query){Console.WriteLine(item);}Console.ReadKey();} 

C#中的集合学习笔记相关推荐

  1. Java 集合学习笔记:Collection

    Java 集合学习笔记:Collection UML 简介 方法和说明 JDK8 新增 `default` 方法 AbstractCollection isEmpty contains(Object ...

  2. Python中索引的学习笔记

    1 前言 今天在学习FaceBoxes- 看到一个比较奇怪的代码,"order = scores.argsort()[::-1][:args.top_k]",不太懂这个" ...

  3. 机器人学中的状态估计——学习笔记

    机器人学中的状态估计--学习笔记 离散时间的批量估计问题 1.最大后验概率法(Maximum A Posteriori, MAP) 2.贝叶斯推断(Bayesian inference) 离散时间的迭 ...

  4. 机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计

    机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计 3.1 离散时间的批量估计问题 3.1.1 问题定义 3.1.2 最大后验估计 3.1.3 贝叶斯推断 3.1.4 存在性.唯一性与能观 ...

  5. JavaSE中Map框架学习笔记

    前言:最近几天都在生病,退烧之后身体虚弱.头疼.在床上躺了几天,什么事情都干不了.接下来这段时间,要好好加快进度才好. 前面用了三篇文章的篇幅学习了Collection框架的相关内容,而Map框架相对 ...

  6. 我的Android进阶之旅------gt;Android中编解码学习笔记

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  7. Java中expecial,RxJava 学习笔记 (一)

    作者: 一字马胡 转载标志 [2017-12-13] 更新日志 日期 更新内容 备注 2017-12-13 RxJava学习笔记系列 系列笔记 (一) 2017-12-15 增加系列笔记(二) 201 ...

  8. zynq中interrupts的学习笔记(一)

    本学习笔记参考UG585-Zynq-7000-TRM.pdf ch.7:Interrupts.文中有说的不够严谨或者是有错误的地方,欢迎指正! zynq中的interrupts有很多种,大体上分为三类 ...

  9. Oracle中job_type,【学习笔记】Oracle DBMS_SCHEDULER详细介绍与使用案例

    天萃荷净 分享一篇关于Oracle DBMS_SCHEDULER详细介绍与使用案例 1.通过DBMS_SCHEDULER.CREATE_JOB直接创建job SQL> create table ...

最新文章

  1. 2_2 递归与分治策略(分治法的基本思想)
  2. [转]Git远程操作详解
  3. java linux so
  4. 【HDU - 5916】Harmonic Value Description (构造,思维,SJ题)
  5. 11.微服务设计 --- 规模化微服务
  6. Oracle 同音字查询,对外汉语汉字教学
  7. python报错:Empty suite
  8. 《微积分》的本质笔记
  9. 阿里首席风险官郑俊芳:安全是我们的生命线,将时刻保持敬畏心
  10. 简单创意思维导图绘制教程分享
  11. Python调用百度AI识别身份证
  12. Ubuntu/Linux Server 服务器系统安装
  13. 链表 - 头节点的意义
  14. 自定义模型 架构_品牌架构定义和模型的艺术,可帮助您摆脱混乱
  15. 基于springboot的作业管理系统
  16. 英语四六级作文最全笔记
  17. 现在的年轻人怎么了?
  18. UE4第一人称游戏 ——(3)添加准星
  19. WINVNC源码阅读(五)
  20. ORACLE学习笔记-CentOS 7.5 Oracle 11gR2安装部署

热门文章

  1. 【自用】 VS2017 部分快捷键
  2. Tensorflow学习笔记:多项式拟合
  3. 趴在门口的云计算,盯上了屋内狂奔的CDN
  4. 2015北京区域赛 Mysterious Antiques in Sackler Museum 几何基础+思维
  5. 委托到Lambda的进化: ()= {} 这个lambda表达式就是一个无参数的委托及具体方法的组合体。...
  6. TFS中的迭代(五)
  7. POJ-2728 Desert King 最优比例生成树 01分数规划/参数搜索
  8. [LeetCode] Multiply Strings 解题报告
  9. matlab根据转移函数绘制放大器幅频响应和相频响应
  10. Attribute ‘sklearn.linear_model._logistic.LogisticRegression.multi_class‘ must be explicitly set to