1.List.BinarySearch():BinarySearch()采用的是二分搜索算法,要求元素已经排好序,其特点是假如元素没有找到,会返回一个负整数,该值的按位取反(~)结果是“大于被查找元素的下一个元素”的索引,如果没有更大的值,则是元素的总数。这样一来就可以在列表中的特定位置方便地插入新值,同时保持已排序的状态。可查看CollecationData.TestBinarySearch()代码。要注意的是,假如事先没有排好序,那么不一定能找到一个元素,即是它确实在列表中。

2.Dictionary<TKey,TValue>的赋值:其赋值有2种方式,

(1)使用Add()方法添加键值对元素,但是若添加了一个相同的键值,会引发一个异常。

(2)使用索引器赋值,如dictionary[key]=value,若没有该键值则进行添加,若有该键值则进行覆盖。

3.字典类是没有特定的顺序,元素使用散列码存到一个散列表中,这样可以实现快速检索。所以如果使用foreach循环来遍历一个字典类,将不按照特定的顺序来访问值。

4.已排序的集合类:SortedDictionary<TKey,TValue>和SortedList<T>,对SortedDictionary<TKey,TValue>元素是按照键排序的,对SortedList<T>元素是按照值排序的。在一个已排序的集合中插入或删除元素时,由于要保持集合中的元素顺序,所以相对前面描述的普通集合,执行时间要稍长一些。可查看CollecationData.TestSortedDictionary()代码。

5.栈集合类Stack<T>:其元素是先进后出,三个关键的方法是Push()、Pop()、Peek(),

(1)Push()将元素送入集合,元素不必是唯一的;

(2)Pop()按照与添加时相反的顺序获取并删除元素;

(3)Peek()返回Pop()将获取的下一个元素,但不修改栈中元素。

6.列队集合Queue<T>:其元素遵循先入先出(元素不必是唯一的),使用Enqueue()进行入队与Dequeue()进行出队(出队会移除元素),相当于一个管子的两端。列队集合根据需要自动增大,当不再需要数据的时候,我们使用TrimToSize()方法来恢复以前的容量。

7.索引运算符:使用this[参数]进行声明,内中含有get与set,索引运算符可以获取多个参数,甚至可以重载。C#编译器为索引运算符创建的CIL代码是一个名为Item的特殊属性索引器在CIL代码中的属性名称默认为Item,但是可以使用IndexerName(标记属性)来指定一个不同的名称,当然在实际使用中并无区别,它是它为不直接支持索引器的语言指定了名称。编译器能检查到这个特性,但是IndexerName标记属性本身是不会在CIL输出中出现的,所以不能通过反射来使用它。

8.迭代器(yield)是如何工作的:C#编译器遇到一个迭代器时,会根据枚举数模式将代码展开成恰当的CIL,在生成的代码中,C#编译器首先创建一个嵌套的private类来实现IEnumerator<T>接口,以及它的Current属性和一个MoveNext()方法,Current属性返回与迭代器的返回类型对应的一个类型。

9.单个类创建多个迭代器(yield):有时候可能希望不同的迭代顺序、比如逆向迭代、对结果进行筛选等,为了在类中声明额外的迭代器,你可以把它们封装到返回IEnumerable<T>或IEnumrable的属性或方法中。

10.yield语句的特征:只有在返回IEnumerator<T>或者IEnumerable<T>类型的成员中,才能声明yield return 语句。更具体地说,只有在返回IEnumerator<T>的GetEnumerator()方法中,或者在返回IEnumerable<T>但不叫做GetEnumerator()的方法中,才能声明yield return。

public class CollecationData
{
public static void TestBinarySearch()
{
List<string> list = new List<string>() { "public", "protected", "private" };
string item = "protected internal";
list.Sort();
int index = list.BinarySearch(item);
if (index < )
{
list.Insert(~index, item);
}
list.ForEach(Console.WriteLine);
} public static void TestSortedDictionary()
{
SortedDictionary<string, string> sortDict = new SortedDictionary<string, string>();
int index = ;
sortDict.Add(index++.ToString(), "object");
sortDict.Add(index++.ToString(), "byte");
sortDict.Add(index++.ToString(), "uint");
sortDict.Add(index++.ToString(), "ulong");
sortDict.Add(index++.ToString(), "float");
sortDict.Add(index++.ToString(), "char");
sortDict.Add(index++.ToString(), "bool");
sortDict.Add(index++.ToString(), "ushort");
sortDict.Add(index++.ToString(), "decimal");
sortDict.Add(index++.ToString(), "int");
sortDict.Add(index++.ToString(), "sbyte");
sortDict.Add(index++.ToString(), "short");
sortDict.Add(index++.ToString(), "long");
sortDict.Add(index++.ToString(), "void");
sortDict.Add(index++.ToString(), "double");
sortDict.Add(index++.ToString(), "string");
Console.WriteLine("key value Hashcode");
Console.WriteLine("--- ----- --------");
foreach (KeyValuePair<string, string> item in sortDict)
{
Console.WriteLine("{0,-5}{1,-9}{2}", item.Key, item.Value, item.Key.GetHashCode());
}
} public static void TestDict()
{
Dictionary<string, string> dict = new Dictionary<string, string>();
dict[""] = "壹";
dict.Add("", "贰");
foreach (var item in dict)
{
Console.WriteLine("key = {0} , value = {1}",item.Key,item.Value);
}
}
}

-------------------以上内容根据《C#本质论 第三版》进行整理

C#学习笔记11的更多相关文章

  1. Ext.Net学习笔记11:Ext.Net GridPanel的用法

    Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...

  2. SQL反模式学习笔记11 限定列的有效值

    目标:限定列的有效值,将一列的有效字段值约束在一个固定的集合中.类似于数据字典. 反模式:在列定义上指定可选值 1. 对某一列定义一个检查约束项,这个约束不允许往列中插入或者更新任何会导致约束失败的值 ...

  3. golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好

    golang学习笔记11   golang要用jetbrain的golang这个IDE工具开发才好  jetbrain家的全套ide都很好用,一定要dark背景风格才装B   从File-->s ...

  4. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  5. Python3+Selenium3+webdriver学习笔记11(cookie处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...

  6. 并发编程学习笔记(11)----FutureTask的使用及实现

    1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口 ...

  7. 《C++ Primer Plus》学习笔记11

    <C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<< ...

  8. SpringMVC:学习笔记(11)——依赖注入与@Autowired

    SpringMVC:学习笔记(11)——依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...

  9. Spring 源码学习笔记11——Spring事务

    Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...

  10. 汇编学习笔记(11)int指令和端口

    格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...

随机推荐

  1. winform datagridview数据显示不全

    如果是内容是汉字,列的宽度设置不够时会自动换行,如果是数字和字母,是不会自动换行的,要把列宽设得足够,整个表格显示不全时,下面会有横向滚动条,如果看不见可能是高度超出了母控件的高度,设得低点就看见了

  2. c++多线程基础5(future,async,packaged_task,promise)

    以下内容整理自:https://www.cnblogs.com/my_life/articles/5401190.html future 是一个能从其他地方获取到一个值的对象,如果是在不同的线程中,则 ...

  3. 使用django进行发送 邮件

    我们来看一下 django发送 邮件的整个流程 第一步:例先去 网易163注册账号并激活发邮件功能 把授权码进行 开启 来到我们的项目setting中进行 一个配置: # 邮箱的配置信息 EMAIL_ ...

  4. 洛谷P3122 [USACO15FEB]圈住牛Fencing the Herd(计算几何+CDQ分治)

    题面 传送门 题解 题目转化一下就是所有点都在直线\(Ax+By-C=0\)的同一侧,也就可以看做所有点代入\(Ax+By-C\)之后的值符号相同,我们只要维护每一个点代入直线之后的最大值和最小值,看 ...

  5. C#调用存储过程的ADO.Net

    using System.Data.SqlClient; //如果存储过程没有输入和输出参数,而且不返回查询结果 SqlCommand cmd = new SqlCommand("存储过程名 ...

  6. HDU 6325 Problem G. Interstellar Travel(凸包)

    题意: 给你n个点,第一个点一定是(0,0),最后一个点纵坐标yn一定是0,中间的点的横坐标一定都是在(0,xn)之间的 然后从第一个点开始飞行,每次飞到下一个点j,你花费的价值就是xi*yj-xj* ...

  7. CodeChef - RIN 最小割应用 规划问题

    题意:给定\(n\)门课和\(m\)个学期,每门课在每个学期有不同的得分,需要选定一个学期去完成,但存在约束条件,共有\(k\)对课程需要\(a\)在\(b\)开始学前学会,求最大得分(原问题是求最高 ...

  8. hdu 1231 最大连续和

    题意:给定一组数,求最大的连续和,且输出开始与结尾 #include<iostream> #include<cstdio> using namespace std; int s ...

  9. 不要重复发明轮子-C++STL

    闫常友 著. 中国铁道出版社. 2013/5 标准的C++模板库,是算法和其他一些标准组件的集合. . 1.类模板简介 2.c++中的字符串 3.容器 4.c++中的算法 5.迭代器 6.STL 数值 ...

  10. 怎样把ppt格式文件放到网页上?

    方法一:把ppt文件的扩展名直接修改为pps,嵌入到网页中嵌入代码:缺点:这种方式浏览器会提示是打开,还是下载,选择打开的话会直接在浏览器中打开,并且客户端一定要安装Office PowerPoint ...