C#之入门总结

xiaoxiao2021-02-28  138

引入StringBuilder的概念

 static void Main(string[] args)         {             Stopwatch sw = new Stopwatch();             string ret = string.Empty;             StringBuilder sb = new StringBuilder();             sw.Start();             for (int i = 0; i < 100000000; i++)             {                 //ret += i;                 sb.Append(i);             }             sw.Stop();             Console.WriteLine("总时间是:{0}",sw.Elapsed);             //Console.WriteLine(ret);         }

集合四大功能,增 删 改 查 .

在前面的章节中讲解过数组可以保存多个对象,但在某些情况下无法确定到底需要保存多少个对象,由于数组的长度不可变,因此数组将不再适用。例如要保存一个学校的学生信息,由于不停有新生来报到,同时也有学生离开学校,这时学生的数目很难确定。为了保存这些数目不确定的对象,C#中提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变,它们统称为集合。 C#中集合可分为泛型集合和非泛型集合,二者均间接实现了 IEnumerable 接口。泛型集合位于 System.Collections.Generic 命名空间,它只能存储同一种类型的对象,其中最常用的是List泛型集合和Dictionary泛型集合。非泛型集合位于System.Collections命名空间,它可以存储多种类型的对象,其中最常用的是ArrayList集合和Hashtable集合。

非泛型:弱类型

支持接受一切类型的元素,但遍历操作的时候会涉及到类型的转换,可能会异常.中间涉及拆装箱操作也比较耗时.

Arraylist

ArrayList list = new ArrayList();             //获取集合元素的数量             Console.WriteLine(list.Capacity);             Console.WriteLine(list.Count);             //向集合中添加数据             list.Add(2);             Console.WriteLine(list.Count);             Console.WriteLine(list.Capacity);             list.Add(3);             list.Add(8);             list.Add(5);             list.Add(6);             list.Add(7);

           Console.WriteLine(list.Capacity);             list.Add(new Student());             list.AddRange(list);             bool ret = list.Contains(100);             Console.WriteLine(ret);             ArrayList arraylist = list.GetRange(1, 3);             从list集合里提取元素组成新集合  从下标为1元素开始提取,提取三个元素             3 4 5//IEnumerator GetEnumerator(int index, int count);             foreach  是对集合做修改  遍历操作  禁止对foreach做删除操作             foreach (var item in arraylist)             {                 Console.WriteLine(item);             }             int index = list.IndexOf(4);             找出集合里元素所对应的索引             Console.WriteLine(index);             list.Insert(1, 100);             从索引为1的位置插入100;             list.Remove(100);             把集合中为100的元素删除             list.RemoveAt(1);             把索引为1的元素从集合删除             list.Reverse();             //将集合进行反转             list.Sort();             list.Reverse();             升序排序             Console.WriteLine("----------");             foreach (var item in list)             {                 Console.WriteLine(item);

Hashtable

           //在 Hashtable 这样的集合中 存储的顺序是乱序的             Hashtable ht = new Hashtable();             ht.Add("北京","重度雾霾");             ht.Add("上海", "梅雨");             ht.Add("郑州","霾");             Console.WriteLine(ht["北京"]);             ht["石家庄"] = "123";             bool ret = ht.Contains("石家庄");             Console.WriteLine(ret);             //ht.Remove("郑州");             ret = ht.Contains("郑州");             Console.WriteLine(ret);             foreach (var item in ht.Keys)             {                 Console.WriteLine(item +"  "+ht[item]);             }

Add,添加元素到集合,

Clear.清除所有元素.

Contains(object key).判断是否包含指定的键(键是唯一的),

ContainsVaiue(object value)判断是否包含指定的值(值不是唯一的),

Remove.(object key)移除指定的键和其匹配的值,

StringBuilder

 static void Main(string[] args)         {             StringBuilder sb = new StringBuilder();;             Console.WriteLine(sb.Capacity);             sb.Append("12");             sb.Append(12);             sb.Append(new Student());             sb.AppendFormat("{0}***{1}***{2}", 12, 13, 45);             sb.Insert(0, "YY");             sb.Remove(0, 2);             sb.Replace("1991", "1998");             sb.Replace("19", "2000", 4, 4);             Console.WriteLine(sb.GetHashCode());             Console.WriteLine(sb.Capacity);             Console.WriteLine(sb.Append(sb));             Console.WriteLine(sb);         }

Append()添加一切元素,

AppendFormat()添加一个Format类型元素,

Insert(index,valua)将元素插入到指定的索引,

Remove(index,value)将指定索引的元素移除,

Replace(object,object)将元素1替换成元素2,

Replace(1234)要替换的字符串,替换的字符串或空,此示例中子字符串开始的位置,子字符串的长度.

泛型:强类型,支持编辑时的检查,只接受一种类型的元素例如<int>.

List<>

        static void Test01()         {             //ArrayList list = new ArrayList();             Add方法的参数类型是object类型 在传递参数的时候整型1会转化成object类型  这样属于装箱操作             //list.Add(1);             如果实现  list[0] + 2  得到正确的结果  要将list[0]转化成int类型  也就是说要进行拆箱操作               //Console.WriteLine((int)list[0] + 2);             //泛型结合在声明的时候已经确定了里面的元素类型             List<string> list = new List<string>();             //里面的传入的数据类型只能和声明时定义的类型保持一致             //泛型能在编译时,提供强大的类型检查,减少数据类型之间的显示转化、装箱操作和运行时的类型检查。             list.Add("C#编程之道");             list.Add("C#从入门到精通");             list.AddRange(list);             Console.WriteLine(list.Count);             bool ret = list.Contains("C#编程之道");             Console.WriteLine(ret);             int index = list.IndexOf("C#从入门到精通");             Console.WriteLine(index);             //从0开始查找,找到元素的下标              index = list.IndexOf("C#从入门到精通", 2);             //2从第二个元素开始查找;             Console.WriteLine(index);             List<int> numList = new List<int>();             numList.Add(1);             numList.Add(2);             numList.Add(5);             numList.Add(1);             numList.Add(2);             numList.Add(2);             numList.Add(4);             List<int> newList = numList.GetRange(0, numList.Count);             //numList.GetRange得到numList的浅源副本,可以理解为把原来的集合赋到新的集合,原来的集合不变             //0代表从下标为0的开始             index = -1;             //记录查找元素的数量             int count = 0;             while (newList.IndexOf(2) != -1)             {                 index = newList.IndexOf(2);                 count++;                 newList.RemoveAt(index);             }             Console.WriteLine(count);             //Console.WriteLine("-------------------------");             //foreach (var item in numList)             //{             //    Console.WriteLine(item);             //}         }     }

Add.添加,

AddRange.将指定元素添加到末尾,

Contains.判断是否包含某元素,

IndexOf(object,index)从指定索引开始寻找并返回找到的第一个索引,否则返回-1,

GetRange(index,count)从索引开始复制count数量的元素到一个子类中.次方法一般用于辅助之后进行操作防止元数据被更改.

RemovrAt(index)移除制定所引出的元素

Dictionary

 static void Test01()         {             Dictionary<string, string> dic = new Dictionary<string, string>();             dic.Add("张杰", "高飞");             dic.Add("刘欢", "好汉歌");             //在一个字典中 键是唯一的             //在一个字典中不同的键可以对应相同的值             dic.Add("周杰伦", "青花瓷");             dic.Add("刘英", "青花瓷");             bool key = dic.ContainsKey("周杰伦");             Console.WriteLine(key);             bool value = dic.ContainsValue("好汉歌");             Console.WriteLine(value);             KeyCollection keys = dic.Keys;             //dic.Remove("刘英");             foreach (var item in keys)             {                 Console.WriteLine(item);             }  }         static void Test02()         {             Dictionary<string, Book> books = new Dictionary<string, Book>();             books.Add("0000000",new Book("C#编程之道",56,"xx"));             books.Add("0000001", new Book("C#从入门到精通", 98, "yy"));             books.Add("0000002", new Book("C#从入门到放弃", 2, "zz"));             foreach (var item in books)             {                 Console.WriteLine(item.Key +" " + item.Value.Price);             }    static void Test03()         {             SortedDictionary<string, string> dic = new SortedDictionary<string, string>();             dic.Add("张杰", "高飞");             dic.Add("刘欢", "好汉歌");             //在一个字典中 键是唯一的             //在一个字典中不同的键可以对应相同的值             dic.Add("周杰伦", "青花瓷");             dic.Add("刘英", "青花瓷");             dic.Add("asdef", "青花瓷");             dic.Add("asdeh", "青花瓷");             bool key = dic.ContainsKey("周杰伦");             Console.WriteLine(key);             bool value = dic.ContainsValue("好汉歌");             Console.WriteLine(value);             foreach (KeyValuePair<string,string> item in dic)             {                 //这里是已经排序排好了的                 Console.WriteLine(item.Key);             }         } HashSet:不能添加相同的元素,会默认删除.

  static void Main(string[] args)         {             HashSet<int> hs = new HashSet<int>();             //不可以有相同元素             //hs.Add(1);             //Console.WriteLine(hs.Count);             //hs.Add(2);             //Console.WriteLine(hs.Count);             //hs.Add(1);             //Console.WriteLine(hs.Count);             Random random = new Random();             while (hs.Count < 100)             {                 hs.Add(random.Next(1, 101));             }             foreach (var item in hs)             {                 Console.WriteLine(item);             }     栈

        void Test()         {             Queue queue = new Queue();             //EnterQueue  入队             queue.Enqueue(1);             queue.Enqueue(2);             queue.Enqueue(3);             //DeleteQueue             queue.Dequeue();             //peek 不影响队列中的元素的             object obj = queue.Peek();             Console.WriteLine(obj + "   ++++");             foreach (var item in queue)             {                 Console.WriteLine(item);             }         }   class Program     {         static void Main(string[] args)         {             Console.WriteLine(Test02(30, 26));         }         static void Test()         {             //FILO   first in last out             Stack stack = new Stack();             //将数据压入到栈             stack.Push(1);             stack.Push(2);             stack.Push(3);             //Console.WriteLine(stack.Count);             //弹出栈顶数据   就是删除栈顶元素             stack.Pop();             //获取栈顶元素             object numberObj = stack.Peek();             Console.WriteLine(numberObj);             foreach (var item in stack)             {                 Console.WriteLine(item);             }         }         static string Test02(int number,int baseNumber)         {             Stack<char> statck = new Stack<char>();             while (number/baseNumber !=0)             {                 statck.Push( (char)(number % baseNumber +'a'));                 number /= baseNumber;             }             statck.Push((char)(number + 'a'));             return new string(statck.ToArray());         }     队列       void Test()         {             Queue queue = new Queue();             //EnterQueue  入队             queue.Enqueue(1);             queue.Enqueue(2);             queue.Enqueue(3);             //DeleteQueue             queue.Dequeue();             //peek 不影响队列中的元素的             object obj = queue.Peek();             Console.WriteLine(obj + "   ++++");             foreach (var item in queue)             {                 Console.WriteLine(item);             }         }

转载请注明原文地址: https://www.6miu.com/read-33373.html

最新回复(0)