前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象(三十一)-数组与字典详解

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

作者头像
孙寅
发布2020-06-02 15:21:20
6220
发布2020-06-02 15:21:20
举报
文章被收录于专栏:宜达数字宜达数字
Array数组

一维数组

  • 语法
代码语言:javascript
复制
第一种:声明数组长度,但是先不赋值
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];
  • 方法 修改数组中某个元素的值
代码语言:javascript
复制
int[] numbers = new int[6];
第一种:numbers.SetValue(200, 0);
第二种: numbers[0] = 200;

数组的遍历

代码语言:javascript
复制
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#中,不能随意删除一个数组的元素。

二维数组与多维数组

  • 语法 数组可以具有多个维度。
代码语言:javascript
复制
第一种:声明数组长度,但是先不赋值
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
  • 方法 获取多维数组的长度
代码语言:javascript
复制
Array.Length

获取多维数组的维度

代码语言:javascript
复制
Array.Rank

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

获取多维数组元素中的值

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

数组的遍历

代码语言:javascript
复制
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);
}
代码语言:javascript
复制
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] + "雷潮教育");
                    }
                }
            }

交错数组

  • 语法
代码语言:javascript
复制
// 第一种声明方式
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 遍历
代码语言:javascript
复制
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) ? "" : " ");
     }
}
代码语言:javascript
复制
 // 声明
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 集合
  • 语法 很多数据的一个集合,长度可以改变,类型随便
代码语言:javascript
复制
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 表示这个集合中可以包含的元素的个数
  • 集合特点 每次超过集合所容纳的空间,集合就会向系统索要多一倍的内存空间。 集合中有对象,打印的是所在的命名空间
  • 练习
代码语言:javascript
复制
ArrayList list = new ArrayList();
Person p = new Person();
list.Add(p)

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

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

Dictionary(字典)
  • 语法
代码语言:javascript
复制
 System.Collections.Generic(程序集:mscorlib)
 // 以 key 的类型为 int , value的类型为string 为例
 Dictionary<int,string>myDictionary=newDictionary<int,string>();
  • 方法 添加元素
代码语言:javascript
复制
myDictionary.Add(1,"C#");

myDictionary.Add(2,"C++");

myDictionary.Add(3,"ASP.NET");

myDictionary.Add(4,"MVC");

通过Key查找元素

代码语言:javascript
复制
if(myDictionary.ContainsKey(1))

{

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

 }

通过KeyValuePair遍历元素

代码语言:javascript
复制
foreach(KeyValuePair<int,string>kvp in myDictionary)
...{
Console.WriteLine("Key = {0}, Value = {1}",kvp.Key, kvp.Value);
}

仅遍历键 Keys 属性

代码语言:javascript
复制
Dictionary<int,string>.KeyCollection keyCol=myDictionary.Keys;
foreach(intkeyinkeyCol)
...{
Console.WriteLine("Key = {0}", key);
}

仅遍历值 Valus属性

代码语言:javascript
复制
Dictionary<int,string>.ValueCollection valueCol=myDictionary.Values;
foreach(stringvalueinvalueCol)
...{
Console.WriteLine("Value = {0}", value);
}

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

代码语言:javascript
复制
myDictionary.Remove(1);
if(myDictionary.ContainsKey(1))
...{
  Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);
}
else
{
Console.WriteLine("不存在 Key : 1"); 
 }
HashTable(键值对集合,字典的升级版)
  • 语法
代码语言:javascript
复制
using System.Collections;
  Hashtable hs = new Hashtable();
            hs.Add(1, "雷潮");
            hs.Add(2, "True");
            hs.Add(3, "教育");
            hs.Add("name","文丽");
  • 方法 遍历
代码语言:javascript
复制
           foreach (var item in hs.Keys)
            {
                Console.WriteLine(item);
            }

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

代码语言:javascript
复制
Stopwatch sw = new Stopwatch
sw.start();
// for循环与foreach
sw.stop();
List(泛型集合)
  • 语法
代码语言:javascript
复制
List<Int> list = new List<int>();
  • 方法 添加元素
代码语言:javascript
复制
list.Add()

添加集合元素

代码语言:javascript
复制
list.AddRange(objct[] item)

将泛型集合换为数组

代码语言:javascript
复制
list.ToArray();
  • 遍历
代码语言:javascript
复制
for(int i = 0,i < list.Count;i++)
{
    Console.WriteLine(list[i])
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Array数组
  • ArrayList 集合
  • Dictionary(字典)
  • HashTable(键值对集合,字典的升级版)
  • List(泛型集合)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档