知识点:
变量: 就是在内存开辟一个存储空间
数组:数据的组合,相同类型的多个数据的组合,在内存中开辟了一段连续的空间,它是一个容器,属于引用类型
数组创建之手,数组长度不能改变
数组的三要素:
1.数据成员
2.数据的下标,可以通过下标获取数据的成员
3.数组的类型(成员类型)
声明数组的格式:
数据类型[] 数组名;//声明一个数组类型的变量
声明数组变量,并实例化数据对象
数据类型[] 数据名=new 数据类型[数组的长度];//长度必须指定
new的作用:在堆区创建对象,并为该死对象分配合适的空间,并返回该对象的地址
数组的注意事项:
1.访问数组成员: 数组名[下标],下标从0开始,数组的最大下标length-1
2.常见错误:IndexOutofRangException: 索引越界
3.获取数组的长度: 数组名.Length
4.声明数组时并初始化数组成员
数据类型[] 数组名=new 数据类型[]{值1,值2,值3.....};
如果指定了数组的长度,那么{}中成员个数必须与长相一致
如果没指定数组的长度,则{}中成员个数任意,数组长度为成员的个数
5. 数据类型[] 数组名=new 数据类型[]{值1,值2,值3.....}的简写方式:
数据类型[] 数组名={值1,值2,值3.....};
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo2
{
class Program
{
static void Main(string[] args)
{
//保存30个学生的学生成绩
//声明一个int类型的数组
//int[] ary;//局部变量
//int[] ary=new int[4];
/*
int[] ary; //声明数组变量
ary=new int[4]; //创建数组对象,并把数组对象的引用赋给ary
ary[0] = 10;
ary[1] = 20;
ary[2] = 30;
ary[3] = 40;
// ary[4] = 50;//出现错误,索引越界
* */
//int[] ary = new int[] { 6, 7, 8, 9 ,5,6,7,9};
//int[] ary = { 6,7,8,9};
//String[] ary = { "aaa","bbb","ccc"};
//float[] ary = { 4.3f,4.6f,8.8f};
//输出数组每个成员
// for (int i = 0; i < ary.Length; i++) {
// Console.WriteLine(ary[i]);
// }
/* Console.WriteLine("------------多维数组--------------");
int[,] ary=new int[2,3];//声明并创建一个二维数组
ary[0, 0] = 1;
ary[0, 1] = 2;
ary[0 ,2] = 3;
ary[1, 0] = 4;
ary[1, 1] = 5;
ary[1, 2] = 6;
int[,] ary2 = new int[,] { {1,2,3},{4,5,6},{6,7,8}};
//遍历二维数组
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
Console.WriteLine(ary[i, j]);
}
}*/
/*
Console.WriteLine("------------交错数组--------------");
int[][] ary=new int[3][];//声明交错数组,数组的成员 又是一个数组
ary[0]=new int[]{1,2,3,4};
ary[1]=new int[]{5,6};
ary[2] = new int[] { 7,8,9,10,11};
for (int i = 0; i < 3; i++) {
int[] tmp = ary[i];
for (int j = 0; j < tmp.Length; j++)
{
Console.WriteLine(ary[i][j]);
}
}
* */
//对数组进行排序(冒泡排序)
int[] ary = new int[] {8,40,10000,4,7 };
Console.WriteLine("---------排序前:---------");
for (int i = 0; i < ary.Length; i++) {
Console.Write(ary[i]+"\t");
}
//比较的轮数(length-1轮)
for (int i = 0; i < ary.Length-1;i++ )
{
//每轮要比较的次数
for (int j = 0; j < ary.Length-1-i; j++) {
if (ary[j] > ary[j + 1]) { //前面大于后面的,则交换位置
int tmp = ary[j];
ary[j] = ary[j + 1];
ary[j + 1] = tmp;
}
}
}
Console.WriteLine("---------排序前:---------");
for (int i = 0; i < ary.Length; i++)
{
Console.Write(ary[i] + "\t");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace Demo3
{
/*结果使用HashTable保存:key为姓氏 value该姓氏的人数
1.遍历集合
2.获取每个人的姓氏
3.判断HashTable是否存在指定的姓氏
a.不存在: 该姓氏第一次出现,在hashTable添加该姓氏的信息,值为1
b.存在:从HashTable获取之前的姓氏人数,该人数再加一,更新HashTable中对应姓氏的人数
4.输出结果
*/
class Program
{
static void Main(string[] args)
{
Hashtable result = new Hashtable();//用于保存结果
ArrayList list = new ArrayList();
list.Add("zhang san");
list.Add("zhao xiao long");
list.Add("li xiao long");
list.Add("zhao san");
list.Add("zhang xiao long");
list.Add("zhang xiao qiong");
list.Add("li xiao long");
list.Add("zhang da qiong");
list.Add("zhao san");
list.Add("li xiao long");
list.Add("wang wu");
//1.遍历集合
for (int i = 0; i < list.Count; i++) {
// 2.获取每个人的姓氏
string xing = list[i].ToString().Split(' ')[0];
// 3.判断HashTable是否存在指定的姓氏
if (result.ContainsKey(xing))
{
//存在
int count = Convert.ToInt32(result[xing]) + 1;
//更新结果
result[xing] = count;
}
else {
//不存在
result.Add(xing,1);
}
}
IDictionaryEnumerator ide=result.GetEnumerator();
while (ide.MoveNext()) {
Console.WriteLine(ide.Key+"\t"+ide.Value);
}
}
}
}