美文网首页C#
面向对象(三十一)-数组与字典详解

面向对象(三十一)-数组与字典详解

作者: 元宇宙协会 | 来源:发表于2017-12-11 00:14 被阅读72次

    Array数组

    一维数组

    • 语法
    第一种:声明数组长度,但是先不赋值
    int[] array = new int[5];
    // 此数组包含从 array[0] 到 array[4] 的元素。 new 运算符用于创建数组并将数组元素初始化为它们的默认值。 在此例中,所有数组元素都初始化为零。
    
    第二种:声明数组时将其初始化
    int[] array1 = new int[] { 1, 3, 5, 7, 9 };
    可以用简写
    int[] array2 = { 1, 3, 5, 7, 9 };
    第三种:可以声明一个数组变量但不将其初始化
    int[] array3; 
    array3 = new int[] { 1, 3, 5, 7, 9 }; // OK 
    //array3 = {1, 3, 5, 7, 9}; // Error    
    
    值类型数组和引用类型数组
    SomeType[] array4 = new SomeType[10];
    
    
    
    • 方法
      修改数组中某个元素的值
    int[] numbers = new int[6];
    第一种:numbers.SetValue(200, 0);
    第二种: numbers[0] = 200;
    
    

    数组的遍历

    int[] numbers = new int[6];
    numbers.SetValue(200, 0);
    numbers[1] = 300;
    for (int i = 0; i < numbers.Length; i++)
    {
        System.Console.WriteLine(numbers[i]);
    }
    
    
    foreach (var item in collection)
    {
    
    }
    
    • 注意点
      如果数组的数据类型被固定了,那么在赋值的时候,就只能赋值该数据类型的值。
      初始化后,数组的长度不可以再修改了
      因此:C#中,不能随意改变数组的长度。C#中,不能随意删除一个数组的元素。

    二维数组与多维数组

    • 语法
      数组可以具有多个维度。
    第一种:声明数组长度,但是先不赋值
    nt[,] array = new int[4, 2];    
    int[, ,] array1 = new int[4, 2, 3]; 
    第二种:不设置级别说明符(数组长度),直接赋初始值
    int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
    int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
    int[, ,] array3D = { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };       
    第三种:既设置长度也赋初始值
     int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
    string[,] array2Db = new string[3, 2] { { "one", "two" }, { "three", "four" }, { "five", "six" } };
    例子2:
    int[, ,] array3Da = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };     
    
    声明一个数组变量但不将其初始化,必须使用 new 运算符将一个数组分配给此变量。
    int[,] array5;
    array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK   
    //array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Error
    
    
    • 方法
      获取多维数组的长度
    Array.Length
    

    获取多维数组的维度

    Array.Rank
    

    获取多维数组中某个元素的值

    获取多维数组元素中的值

    修改数组中某个元素的值
    在这里第一个值,是你要设置的值,后面的几个值,是表示这个值在数组中的坐标

    数组的遍历

    int[,] array3 = { { 1, 11, 12, 13, 14 }, { 2, 21, 22, 23, 24 } };
    for (int i = 0; i < array3.Rank; i++)
    {
         for (int j = 0; j < 5; j++)
        {
            Console.WriteLine(array3[i,j]);
        }
    }
    
    foreach (var item in array3)
    {
        Console.WriteLine(item);
    }
    
    
    int[,,] array6 = { 
                                   { 
                                         {1,2,3 },{4,5,6 }
                                   },
                                   {
                                         {11,12,13 },{14,15,16 }
                                   }
                                         };
    for (int i = 0; i < 2; i++)
                {
                    for (int j = 0; j < 2; j++)
                    {
                        for (int p = 0; p < 3; p++)
                        {
                            Console.WriteLine(array6[i,j,p] + "雷潮教育");
                        }
                    }
                }
    

    交错数组

    • 语法
    // 第一种声明方式
    int[][] numbers = new int[2][];
    // 初始化
    numbers[0] = new int[5];
    numbers[1] = new int[4];
    // 赋值
                numbers[0][0] = 1;
                numbers[0][1] = 2;
                numbers[0][2] = 3;
                numbers[0][3] = 4;
                numbers[0][4] = 5;
                numbers[1][0] = 0;
                numbers[1][1] = 1;
                numbers[1][2] = 2;
                numbers[1][3] = 3;
    
    //  第二种声明方式 声明的过程中初始化
                int[][] numbers1 = new int[][] {
                     new int[4],
                     new int[5]
                };
                // 赋值
                numbers1[0][0] = 1;
                numbers1[0][1] = 2;
                numbers1[0][2] = 3;
                numbers1[0][3] = 4;
                numbers1[1][0] = 1;
                numbers1[1][1] = 2;
                numbers1[1][2] = 3;
                numbers1[1][3] = 4;
                numbers1[1][4] = 5;
    
    // 第三种声明方式 初始化完成的时候赋值
                int[][] numbers2 = {
                    new int[]{1,2,3,4},
                    new int[]{ 0,1,2,3,4}
                };
    
    
    • 方法
      获取长度
      numbers2.Length
      遍历
    for (int i = 0; i < numbers2.Length; i++)
    {       
        for (int j = 0; j < numbers2[i].Length; j++)
        {
               Console.Write("{0}{1}", numbers2[i][j], j == (numbers2[i].Length - 1) ? "" : " ");
         }
    }
    
     // 声明
    int[][,] number3 = new int[2][,];
     number3[0] = new int[,] { { 1, 2, 3 }, { 3, 4, 5 } };
     number3[1] = new int[,] { { 44, 55 } };
      // 获取交错数组的长度
    Console.WriteLine(number3.Length);
               // 遍历复杂的交错数组
                for (int i = 0; i < number3.Length; i++)
                {
                    foreach (var item in number3[i])
                    {
                        Console.WriteLine(item);
                    }
                }
    

    ArrayList 集合

    • 语法
      很多数据的一个集合,长度可以改变,类型随便
    using System.Threading.Tasks;
    ArrayList list = new ArrayList();
    
    • 方法
      添加元素(object)
      list.Add()
      list.AddRange(new string[]{"jiaoyu","leichao","lisi","str","2"})
      获取集合元素个数
      list.count
      删除元素
      list.Clear()
      删除某个元素
      list.Remove(某个元素);
      list.RemoveAt(元素下标)
      移除一定范围的元素
      list.RemoveRange(0,2)
      升序排列
      list.Sort()
      反转
      list.Reverse()
      插入
      list.Insert()
      在指定位置插入集合
      list.InsertRange()
      判断是否包含某个指定元素
      list.Contains(1);
      关于集合的长度
      count 表示这个集合中实际包含的元素的个数
      capcity 表示这个集合中可以包含的元素的个数

    • 集合特点
      每次超过集合所容纳的空间,集合就会向系统索要多一倍的内存空间。
      集合中有对象,打印的是所在的命名空间

    • 练习

    ArrayList list = new ArrayList();
    Person p = new Person();
    list.Add(p)
    
    

    创建一个集合,添加数据,求平均值与和

    写一个集合,要求随机存放10个数字,所有的数字不重复

    Dictionary(字典)

    • 语法
     System.Collections.Generic(程序集:mscorlib)
     // 以 key 的类型为 int , value的类型为string 为例
     Dictionary<int,string>myDictionary=newDictionary<int,string>();
    
    • 方法
      添加元素
    myDictionary.Add(1,"C#");
    
    myDictionary.Add(2,"C++");
    
    myDictionary.Add(3,"ASP.NET");
    
    myDictionary.Add(4,"MVC");
    

    通过Key查找元素

    if(myDictionary.ContainsKey(1))
    
    {
    
    Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);
    
     }
    

    通过KeyValuePair遍历元素

    foreach(KeyValuePair<int,string>kvp in myDictionary)
    ...{
    Console.WriteLine("Key = {0}, Value = {1}",kvp.Key, kvp.Value);
    }
    

    仅遍历键 Keys 属性

    Dictionary<int,string>.KeyCollection keyCol=myDictionary.Keys;
    foreach(intkeyinkeyCol)
    ...{
    Console.WriteLine("Key = {0}", key);
    }
    

    仅遍历值 Valus属性

    Dictionary<int,string>.ValueCollection valueCol=myDictionary.Values;
    foreach(stringvalueinvalueCol)
    ...{
    Console.WriteLine("Value = {0}", value);
    }
    

    通过Remove方法移除指定的键值

    myDictionary.Remove(1);
    if(myDictionary.ContainsKey(1))
    ...{
      Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);
    }
    else
    {
    Console.WriteLine("不存在 Key : 1"); 
     }
    

    HashTable(键值对集合,字典的升级版)

    • 语法
    using System.Collections;
      Hashtable hs = new Hashtable();
                hs.Add(1, "雷潮");
                hs.Add(2, "True");
                hs.Add(3, "教育");
                hs.Add("name","文丽");
    
    • 方法
      遍历
               foreach (var item in hs.Keys)
                {
                    Console.WriteLine(item);
                }
    

    这种方法可以插入数据
    hs[5] = "雷潮教育"
    判断是否包含某个键值
    hs.ContainsKey("深圳")
    修改某个键值的值
    hs[键值对] = 具体的值
    清空集合
    hs.Clear()
    删除某个值
    hs.Remove()

    Stopwatch sw = new Stopwatch
    sw.start();
    // for循环与foreach
    sw.stop();
    

    List(泛型集合)

    • 语法
    List<Int> list = new List<int>();
    
    • 方法
      添加元素
    list.Add()
    

    添加集合元素

    list.AddRange(objct[] item)
    

    将泛型集合换为数组

    list.ToArray();
    
    • 遍历
    for(int i = 0,i < list.Count;i++)
    {
        Console.WriteLine(list[i])
    }
    

    相关文章

      网友评论

        本文标题:面向对象(三十一)-数组与字典详解

        本文链接:https://www.haomeiwen.com/subject/zssbixtx.html