zoukankan      html  css  js  c++  java
  • C#中的集合学习笔记

      前言:漫长的国庆长假终于快结束了,我们该工作的工作了,该学习的学习了,该干什么的也都开始了,这篇博客我主要说一下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", "得到");
    
                //仅仅遍历key
    
                foreach (string item in has.Keys)
    
                {
    
                    Console.WriteLine(item);
    
                }
    
                //遍历value
    
                foreach (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 nums
    
                                    where n > 100 && n < 500
    
                                     select n;
    
                 foreach (var item in query)
    
                {
    
                       Console.WriteLine(item);
    
                }
    
                Console.ReadKey();
    
    } 
  • 相关阅读:
    java泛型
    转载:MSIL Instruction Table
    What if your dynamic sql statement is too long?
    自己第一个正儿八经的div+css页面
    bulk insert formatFile格式记录
    日志 20071221(WCF,using keyword)
    C++点滴
    The scripts used to generate a demo "School" database (with data)
    The typical scenarios of using "Insert" in Tsql
    如何生成任意给定区间的随机值序列
  • 原文地址:https://www.cnblogs.com/hanyinglong/p/2713318.html
Copyright © 2011-2022 走看看