美文网首页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])
}

相关文章

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

    Array数组 一维数组 语法 方法修改数组中某个元素的值 数组的遍历 注意点如果数组的数据类型被固定了,那么在赋...

  • 面向对象

    面向过程与面向对象: 内存解析 对象数组的内存解析 匿名对象

  • 7.1.1 PHP面向对象之面向过程详解

    7.1.1 PHP面向对象之面向过程详解面向对象的编程思想Object Oriented 大象与冰箱1、打开2、装...

  • ios字典和数组输出中文乱码

    在iOS中打印字典或者数组对象,系统会默认调用字典对象和数组对象的descriptionWithLocale:方法...

  • JS第四天

    一、面向对象JS JS面向对象初始 1、属性与方法 使用属性解决循环绑定变量污染 2、类字典结构使用 结构 拓展 ...

  • 2020-01-03day7面向对象

    不能用foreach因为与相应数组不关联 数组删除 1.面向过程(C)和面向对象(C++、Java、GO、pyth...

  • iOS网络层业务层-dianping api 业务层封装

    1.面向通用网络工具类开发 参数是字典对象目前的请求参数是面向字典在开发字典的key容易写错 返回值是JSON对象...

  • iOS 杂谈

    字典 字典只能存储对象 key - value 里面存的东西都是键值对 数组 数组里面也只能存储对象 NSNu...

  • 面向对象与static详解

    一、万物皆对象 对象:在现实生活中存在具体的一个事物。;类:实际就是对某种类型事物的共性属性与行为的抽取。人类认识...

  • Objective-C 字典

    字典 字典与数组不同,是一个无序的集合,用来存储具有一一对应关系的数据。而数组是有序的。字典中存储的每一个对象都是...

网友评论

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

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