数组与集合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组与集合相关的知识,希望对你有一定的参考价值。
5-1- 数组
数组 → 能存放任意多个同类型的数据
数组的索引(下标)是一个int类型的数字
索引(下标)是从0开始,依次为数组中每一个数组项编号
数组的代码书写
数组的声明与赋值
声明:数据类型 [] 变量名; → 数据类型就是数组项的类型
赋值:变量名 = new 数据类型 [长度]; → 长度为int类型,表示数组的长度
数组项的默认值:一个数组创建后,它每一个数组项的值,为数组项 类型的默认值
数字类型 → 默认值为0
bool类型 → 默认值为 false
char类型 → 默认值为 \0
string类型 →默认值为 null
例:
int[] numbers = new inr[5]; → 定义了一个 numbers 变量,它是一个 数组 可以存放 5 个 int类型的数据
数据类型要完全一致
声明和赋值合并书写:
数据类型 [] 变量名 = new 数据类型[];
数组项的读取与修改
读取: 变量名[索引] → 从指定数组中通过编号取出某一个数组项的值,返回类型与数组项相同
修改:变量名[索引] = 值;
代码示例:
int[] number = new int [5]; → 定义一个数组 number 存放5个int类型的数据 , 索引的范围是0-4;
number[0] = "3"; → "3"为string类型,无法赋值到number[0],无法把string了新转换为int类型;所以把 ”3“ 改为 3 → number[0] = 3
number[5] = -2; → 没有索引为 5 的数组项 ,所以运算错误:下标(索引)越界;所以就要把 number[5] 改为 number[1];
number[3] = number[0] * 2 + number[1] ; → number[3] = 4;
Console.WriteLine(number[3]); → 输出结果是 4
Console.WriteLine(bumbers.Lengrh); → 读取数组长度(变量名.Length) 输出结果是 5
读取数组长度
变量名.Length → 返回类型: int=
练习:
//创建一个长度为3的字符串数组,然后依次为它的每一项分别赋值a、b、c
//输出该数组的长度
string[] zm = new string[3];
zm[0] = "a";
zm[1] = "b";
zm[2] = "c";
Console.WriteLine(zm.Length);
简写:
string[] strs = new string[3]{"a","b","c"}; → new string[3]{"a","b","c"} 为数组初始化器,在创建数组时,为其每一项赋值,简化写发只能在数组定义语句中使用
Console.WriteLine(zm.Length);
数组 → 能存放任意多个同类型的数据
数组的索引(下标)是一个int类型的数字
索引(下标)是从0开始,依次为数组中每一个数组项编号
数组的代码书写
数组的声明与赋值
声明:数据类型 [] 变量名; → 数据类型就是数组项的类型
赋值:变量名 = new 数据类型 [长度]; → 长度为int类型,表示数组的长度
数组项的默认值:一个数组创建后,它每一个数组项的值,为数组项 类型的默认值
数字类型 → 默认值为0
bool类型 → 默认值为 false
char类型 → 默认值为 \0
string类型 →默认值为 null
例:
int[] numbers = new inr[5]; → 定义了一个 numbers 变量,它是一个 数组 可以存放 5 个 int类型的数据
数据类型要完全一致
声明和赋值合并书写:
数据类型 [] 变量名 = new 数据类型[];
数组项的读取与修改
读取: 变量名[索引] → 从指定数组中通过编号取出某一个数组项的值,返回类型与数组项相同
修改:变量名[索引] = 值;
代码示例:
int[] number = new int [5]; → 定义一个数组 number 存放5个int类型的数据 , 索引的范围是0-4;
number[0] = "3"; → "3"为string类型,无法赋值到number[0],无法把string了新转换为int类型;所以把 ”3“ 改为 3 → number[0] = 3
number[5] = -2; → 没有索引为 5 的数组项 ,所以运算错误:下标(索引)越界;所以就要把 number[5] 改为 number[1];
number[3] = number[0] * 2 + number[1] ; → number[3] = 4;
Console.WriteLine(number[3]); → 输出结果是 4
Console.WriteLine(bumbers.Lengrh); → 读取数组长度(变量名.Length) 输出结果是 5
读取数组长度
变量名.Length → 返回类型: int=
练习:
//创建一个长度为3的字符串数组,然后依次为它的每一项分别赋值a、b、c
//输出该数组的长度
string[] zm = new string[3];
zm[0] = "a";
zm[1] = "b";
zm[2] = "c";
Console.WriteLine(zm.Length);
简写:
string[] strs = new string[3]{"a","b","c"}; → new string[3]{"a","b","c"} 为数组初始化器,在创建数组时,为其每一项赋值,简化写发只能在数组定义语句中使用
Console.WriteLine(zm.Length);
5-2- 数组的定长性
一个数组在创建后,它的长度固定不变
数组适用于数据量固定的场景
适合使用数组的场景:
1、保存100以内的所有质数
2、保存太阳系中所有已知行星的质量
3、保存一个星期的所有日期
其它定长的数据场景
不适合使用数组的场景:
1、保存一个班的学生信息
2、保存一年中的所有日期
3、保存游戏中某玩家的装备信息
其它不定长的数据场景
一个数组在创建后,它的长度固定不变
数组适用于数据量固定的场景
适合使用数组的场景:
1、保存100以内的所有质数
2、保存太阳系中所有已知行星的质量
3、保存一个星期的所有日期
其它定长的数据场景
不适合使用数组的场景:
1、保存一个班的学生信息
2、保存一年中的所有日期
3、保存游戏中某玩家的装备信息
其它不定长的数据场景
5-3 数组的遍历
是指从数组的第一项开始,依次取玩数组的所有项
要实现数组的遍历,可以使用循环
循环变量从0开始,依次取到数组的最大下标(数组的长度-1)
在循环体中,使用循环变量作为下标,即可取出数组每一项的值
代码示例:
for(int i = 1; i < arrays.Length[i]); i++)
{
Console.WriteLine(arrays[i]);
}
是指从数组的第一项开始,依次取玩数组的所有项
要实现数组的遍历,可以使用循环
循环变量从0开始,依次取到数组的最大下标(数组的长度-1)
在循环体中,使用循环变量作为下标,即可取出数组每一项的值
代码示例:
for(int i = 1; i < arrays.Length[i]); i++)
{
Console.WriteLine(arrays[i]);
}
5-4-交换排序
排序问题
有一个数组,数组中存放了很多数字,现要求将数组中的数组按照从小到大的顺序排列
子主题 2
排序问题
有一个数组,数组中存放了很多数字,现要求将数组中的数组按照从小到大的顺序排列
子主题 2
5-5- 应用:数组分析器
5-6- 集合
集合:用于存储多个同类型的数据
不定长:保存的数据数量,可以在程序的执行过程中,不断发生改变
占用内存多
遍历速度慢
在功能上,数组能实现的所有功能,集合都能实现,反之,集合能实现的某些功能,数组难以实现
C#语言支持的集合类型
1、List :最常见的集合类型
创建
定义
Lisr<数据类型>变量名; 数据类型[] 变量名; → 数组定义
→ 都表示每一个元素(项)的数据类型
赋值
变量名 = new List<数据类型>(); →集合是不定长的,所以赋值是 无需 指定长度,赋值后长度 可以变化
数组赋值: 变量名 = new 数据类型[长度] → 由于数据的定长性,所以赋值是 必须 指定长度,赋值后长度 固定不变
初始化
数组初始化器 → 变量名 = newLIst<数据类型>{元素1,元素2,…………元素n}
List结合的创建示例:
List<int> nums = new List<int>(); → nums:没有元素 ; 长度为0
int[] nums = new int[3]; → nums有元素 ; 长度为3
变量名.Add(要添加的数据)
操作
添加元素
向集合的 末尾 ,添加一个新元素
书写方式:
变量名.Add(要添加的数据); → 数据必须与几何定义时规定的元素类型一致
代码示例:
List<int> nums = new List<int>{3,5,7};
nums.Add(1);
nums.Add(3);
→ List<int> nums = new List<int>{3,5,7,1,3};
插入元素
向集合的 指定位置,插入一个新的元素
变量名.Insert(索引,要插入的数据);
插入元素示例:
List<int> nums = new List<int>{3,5,7};
nums.Insert(1,10);
→ List<int> nums = new List<int>{3,10,5,7};
删除元素
变量名.Re oveAt(索引);
删除指定 索引 位置的元素
变量名.Remove(数据);
删除集合中与填写的 数据 相同的 第一个匹配项
示例:
List<int> nums = new List<int>{1,1,2,3,5};
nums.RemoveAt(2);→ 删除索引为 2 的元素
nums.Remove(1); → 删除与数据 1 相同的 第一个 元素
→ List<int> nums = new List<int>{1,3,5};
修改元素
修改集合中某个元素的值
变量名.[索引] = 值;
读取 和 修改元素与数字的操作方式完全一致
获取元素数量
获取集合的 长度
获取元素数量:变量名.Count;
获取数字长度:变量名.Length;
2、Queue
3、Stack
4.Linkedlist
5、HashSet
其它
集合:用于存储多个同类型的数据
不定长:保存的数据数量,可以在程序的执行过程中,不断发生改变
占用内存多
遍历速度慢
在功能上,数组能实现的所有功能,集合都能实现,反之,集合能实现的某些功能,数组难以实现
C#语言支持的集合类型
1、List :最常见的集合类型
创建
定义
Lisr<数据类型>变量名; 数据类型[] 变量名; → 数组定义
→ 都表示每一个元素(项)的数据类型
赋值
变量名 = new List<数据类型>(); →集合是不定长的,所以赋值是 无需 指定长度,赋值后长度 可以变化
数组赋值: 变量名 = new 数据类型[长度] → 由于数据的定长性,所以赋值是 必须 指定长度,赋值后长度 固定不变
初始化
数组初始化器 → 变量名 = newLIst<数据类型>{元素1,元素2,…………元素n}
List结合的创建示例:
List<int> nums = new List<int>(); → nums:没有元素 ; 长度为0
int[] nums = new int[3]; → nums有元素 ; 长度为3
变量名.Add(要添加的数据)
操作
添加元素
向集合的 末尾 ,添加一个新元素
书写方式:
变量名.Add(要添加的数据); → 数据必须与几何定义时规定的元素类型一致
代码示例:
List<int> nums = new List<int>{3,5,7};
nums.Add(1);
nums.Add(3);
→ List<int> nums = new List<int>{3,5,7,1,3};
插入元素
向集合的 指定位置,插入一个新的元素
变量名.Insert(索引,要插入的数据);
插入元素示例:
List<int> nums = new List<int>{3,5,7};
nums.Insert(1,10);
→ List<int> nums = new List<int>{3,10,5,7};
删除元素
变量名.Re oveAt(索引);
删除指定 索引 位置的元素
变量名.Remove(数据);
删除集合中与填写的 数据 相同的 第一个匹配项
示例:
List<int> nums = new List<int>{1,1,2,3,5};
nums.RemoveAt(2);→ 删除索引为 2 的元素
nums.Remove(1); → 删除与数据 1 相同的 第一个 元素
→ List<int> nums = new List<int>{1,3,5};
修改元素
修改集合中某个元素的值
变量名.[索引] = 值;
读取 和 修改元素与数字的操作方式完全一致
获取元素数量
获取集合的 长度
获取元素数量:变量名.Count;
获取数字长度:变量名.Length;
2、Queue
3、Stack
4.Linkedlist
5、HashSet
其它
5-7- foreach循环
forrach循环 : 只能遍历数组或集合
代码格式:
foreach(数据类型变量 in 数字或集合)
{
循环体
}
注:从 数字或集合 中,依次取出每一项的数据,每取出意向数据,就把数据赋值给循环 变量
子主题 1
代码示例:
已知有一个 int 类型的List集合,变量名为 numsers,要求依次输出集合中的每一项
foreach循环实现:
foreach(int item in numbers)
{
Console.WriteLine(item); →效率高
}
for循环实现:
for(int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]); →效率低
}
代码示例:
已知有一个 int 类型的List集合,变量名为 numsers,要求将数字中的每一项自增 1
foreach循环实现:
foreach(int item in numbers)
{
item++; → 错误 :foreach循环也叫作只读循环,在循环体中,不能更改集合或数组
}
for循环实现:
for(int i = 0; i < numbers.Length; i++)
{
numbers[i]++;
}
forach循环和for循环
foreach: 只能用于遍历,不能更改循环目标,遍历速度 快,执行效率 高
for: 可以用于任何形式的重复行为,再循环体中,可以进行任何操作,遍历速度 慢,执行效率 低
若需要遍历集合或数组,并且遍历过程中只需要读取而不会更改,使用foreach循环,反之,则根据需要,选择其它循环
forrach循环 : 只能遍历数组或集合
代码格式:
foreach(数据类型变量 in 数字或集合)
{
循环体
}
注:从 数字或集合 中,依次取出每一项的数据,每取出意向数据,就把数据赋值给循环 变量
子主题 1
代码示例:
已知有一个 int 类型的List集合,变量名为 numsers,要求依次输出集合中的每一项
foreach循环实现:
foreach(int item in numbers)
{
Console.WriteLine(item); →效率高
}
for循环实现:
for(int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]); →效率低
}
代码示例:
已知有一个 int 类型的List集合,变量名为 numsers,要求将数字中的每一项自增 1
foreach循环实现:
foreach(int item in numbers)
{
item++; → 错误 :foreach循环也叫作只读循环,在循环体中,不能更改集合或数组
}
for循环实现:
for(int i = 0; i < numbers.Length; i++)
{
numbers[i]++;
}
forach循环和for循环
foreach: 只能用于遍历,不能更改循环目标,遍历速度 快,执行效率 高
for: 可以用于任何形式的重复行为,再循环体中,可以进行任何操作,遍历速度 慢,执行效率 低
若需要遍历集合或数组,并且遍历过程中只需要读取而不会更改,使用foreach循环,反之,则根据需要,选择其它循环
以上是关于数组与集合的主要内容,如果未能解决你的问题,请参考以下文章