数组

/*
 * 
 *    学习数组
 *    数组在有些书里面称之为引用类型,更确切的说数组是一种数据结构.
 *    
*/
using System;
using System.Collections;

namespace 数组
{
	class Person
	{
		public string name;
		public string age;

		public Person(string name,string age){
			this.name = name;
			this.age = age;
		}
	}

	class MainClass
	{

		public static void Main (string[] args)
		{
			//******************************************************************* 最基本的数组   ---------掌握
			//数组的定义:存储相同数据类型的集合.
			//定义了一个长度为4的整型数组,这个数组只可以存整行数据
			//第一种写法:动态分配内存空间
			//			int[] intArray = new int[4];
			//第二种写法
			//			int[] intArray = new int[]{1,2,3,4};
			//注意:初始化数组的时候,要么给定长度,要么初始化数组内的元素个数.
			//第三种写法
			//			int[] intArray = {1,2,3,4};

			//实际上我们int[] 它的原型为 Array
			//而int[] 数组可以用foreach循环的原因归根结底为,Array类本身已经实现了IEnumrable这个接口.
			//所以int[] 才可以用foreach循环

			//访问数组的元素
			//访问数组第0个位置存储的元素
			//			Console.WriteLine("数组第0个位置存储的元素为:" + intArray[0]);
			//访问数组第4个位置存储的元素----- 访问越界(程序崩溃)
			//			Console.WriteLine ("数组第4个位置存储的元素为:" + intArray [4]);

			//遍历数组1
			//			for (int i = 0; i < intArray.Length; i++) {
			//				Console.WriteLine ("下标:{0},值为:{1}", i, intArray [i]);
			//			}

			//遍历数组2
			//			foreach (int item in intArray) {
			//				Console3.WriteLine ("数组的元素为:" + item);
			//			}

			//如何修改数组中的元素呢?
			//通过索引取值进行赋值
			//			intArray[2] = 10.0f;   这是错误的因为数据类型不对
			//			intArray[2] = 10;

			//
			//			//遍历数组2
			//			foreach (int item in intArray) {
			//				Console.WriteLine ("数组的元素为:" + item);
			//			}

			//练习1:分别声明string,char,float,double相应类型的数组,进行遍历访问.
			//			string[] s = { "Hello", "World" };
			//			  char[] c = { 'H', 'e', 'l', 'l', 'o' };
			//			 float[] f = { 1.0f, 2.0f, 3.0f };
			//			double[] d = { 1.11f, 2.22f, 3.33f };


			//*****************************************************  对象类型的数组(了解)
			//			Person[] persons = new Person[] {
			//				new Person("小伟","18"),
			//				new Person("小伦","19")
			//			};
			//
			//			foreach (Person p in persons) {
			//				Console.WriteLine ("姓名:{0}年龄:{1}", p.name, p.age);
			//			}



			//*****************************************************  Array抽象类型的抽象数组(了解)

			//			Array arr = Array.CreateInstance (typeof(int), 5);
			//			arr.SetValue (1, 0);
			//			arr.SetValue (2, 1);
			//			arr.SetValue (3, 2);
			//
			//			for (int i = 0; i < 5; i++) {
			//				Console.WriteLine (arr.GetValue(i));
			//			}
			//
			//			//把arr数组转换成int[]数组
			//			int[] newIntArray = (int[])arr;
			//
			//			foreach (int item in newIntArray) {
			//				Console.WriteLine (item);
			//			}

			//练习2:分别定义练习1类型对应的Array数组,设置数组元素,并且遍历所有元素

			//**************************************************************************** ArraySegment<T> 

			//			ArraySegment<T> 
			//			int[] intArray1 = { 1, 2, 3, 4 };
			//			int[] intArray2 = { 5, 6, 7, 8 };
			//
			//			var se1 = new ArraySegment<int>[2] {
			//				new ArraySegment<int>(intArray1,0,3),
			//				new ArraySegment<int>(intArray2,3,1)
			//			};
			//
			//			ArraySegment<int> se = (ArraySegment<int>[])se1;
			//			Print (se1);

			//*****************************************************************************

			//练习3:找出数组中最大值,以及最大值所在的位置(至少5个数)
			//			int max = 0;
			//			int maxIndex = 0;
			//			int[] intArray = { 6, 10, 88, 1, 2 };
			//			for (int i = 0; i < intArray.Length; i++) {
			//				if (intArray [i] > max) {
			//					max = intArray [i];
			//					maxIndex = i;
			//				}
			//			}
			//			Console.WriteLine ("最大值为:{0}", max);
			//			Console.WriteLine ("最大值所在的位置:{0}", maxIndex);


			//练习4:定义一个整型数组,初始化3个整型元素,打印出最大值,最小值,以及平均值.
			//			int[] a = new int[]{1,4,7,};
			//			int max = a [0],min=a[0],sum=0;
			//			for (int i = 0; i < a.Length; i++) {
			//				if (max<a[i]) {
			//					max = a [i];
			//				}
			//				if (min>a[i]) {
			//					min = a [i];
			//				}
			//				sum += a [i];
			//			}
			//			Console.WriteLine ("a数组中的最大值为{0},最小值为{1},平均值为{2}",max,min,sum/a.Length);



			//练习5:定义一个数组,从键盘上获取三个整型数值,打印出最大值
			//			int[] a=new int[3];
			//			for (int i = 0; i < a.Length; i++) {
			//				a [i] = int.Parse (Console.ReadLine());
			//			}
			//			int max1=a[0];
			//			for (int i = 0; i < a.Length; i++) {
			//				max1=a[i]>max1?a[i]:max1;
			//			}
			//			Console.WriteLine ("最大值为:{0}",max1);


			//练习6:拼接两个字符串数组,到一个数组,遍历显示
			//			string[] stringNum1 = {"你好","哈哈"};
			//			string[] stringNum2 = { "我不好", "才怪" };
			//			string[] stringNum3 = new string[stringNum1.Length + stringNum2.Length];
			//
			//			for (int i = 0; i < stringNum1.Length; i++) 
			//			{
			//				stringNum3 [i] = stringNum1 [i];
			//			}
			//
			//			for (int j = 0; j < stringNum2.Length; j++) 
			//			{
			//				stringNum3 [stringNum1.Length+j] = stringNum2 [j];
			//			}
			//
			//			foreach (string item in stringNum3) 
			//			{
			//				Console.WriteLine (item);
			//			}

			//			ArrayList
	// 数组排序  -- 自己的算法
//			Stopwatch sw = new Stopwatch();
//			int[] intArray = {10,9,8,7,6,5,4,3,2,1};
//			sw.Start ();
//			for(int i = 0;i < intArray.Length - 1 ;i++){      // 
//				for (int j = 0; j < intArray.Length -1 - i; j++) {
//					if (intArray[j] > intArray[j + 1]) {
//						int temp = intArray [j];
//						intArray [j] = intArray [j + 1];
//						intArray [j + 1] = temp;
//					}
//				}
//			}
//			sw.Stop ();
//			Console.WriteLine ("时间是{0}",sw.Elapsed);
//			foreach (var item in intArray) {
//				Console.WriteLine (item);
//			}
//			// 如何使用系统内置的排序
//			sw.Start();
//			Array.Sort(intArray);
//			sw.Stop ();
//			Console.WriteLine ("时间是{0}",sw.Elapsed);
//			foreach (var item in intArray) {
//				Console.WriteLine (item);
//			}
			// 课后拓展:桶排序(啊哈算法)

			// 练习 :(1) 整数数组冒泡排序
			//      (2) 字符串数组,Array.sort()排序

//			int[] a = { 18, 56, 12, 9, 45, 72, 33, 6, 43 };
//			for (int i = 0; i < a.Length - 1; i++) {
//				for (int j = 0; j < a.Length - 1 -i; j++) {
//					if (a[j] > a[j + 1]) {
//						int temp = a [j];
//						a [j] = a [j + 1];
//						a [j + 1] = temp; 
//					}
//				}
//			}
//			foreach (var item in a) {
//				Console.WriteLine (item);
//			}

//			string[] s = { "H", "J", "L", "F", "R" };
//			Array.Sort (s);
//			foreach (var item in s) {
//				Console.WriteLine (item);
//			}
			// 二维数组
//			int[,] twodim = new int[3,3];
//			twodim [0, 0] = 1;
//			twodim [0, 1] = 2;
//			twodim [0, 2] = 3;
//
//			for (int i = 0; i < 3; i++) {
//				for (int j = 0; j < 3; j++) {
//					Console.Write (twodim[i,j]+ " ");
//				}
//				Console.WriteLine ();
//			}

			/*
			 * 4 8 9 6 0
			 * 7 4 22 11 4 
			 * 90 8 65 32 1
			 * 12 5 2 8 0
			*/

			// 第一种定义:二维数组
//			int[,] twodim = { { 4, 8, 9, 6, 0 }, { 7, 4, 22, 11, 4 }, { 90, 8, 65, 32, 1 }, { 12, 5, 2, 8, 0 } };
//			for (int i = 0; i < 4; i++) {
//				for (int j = 0; j < 5; j++) {
//					Console.Write (twodim[i,j]+ " ");
//				}
//				Console.WriteLine ();
//			}

			//第二种定义二维数组的方法
			//锯齿数组
//			int[][] twodim = new int[3][];
//			twodim [0] = new int[]{ 1, 2, 3 };
//			twodim [1] = new int[]{ 1, 2, 3, 4};
//			twodim [2] = new int[]{ 1, 2, 3, 4, 5};
//			for (int i = 0; i < twodim.Length; i++) {
//				for (int j = 0; j < twodim[i].Length; j++) {
//					Console.Write (twodim[i][j] + " ");
//				}
//				Console.WriteLine ();
//			}
			// 总结二维数组
			// 第一种声明格式:int[,] 遍历访问的时候要采取arr[i,j]的方式进行访问
			// 第二种声明格式:int[][] 这种写法的二维数组实际上是由多个一维数组构成,可以不声明
			// 列数,但是必须声明行数,访问方式是arr[i][j]

			// 练习1:采用int[,]方式进行声明数组并初始化,遍历数组元素
//			int[,] a = { { 3, 5, 8, 15, 4 }, { 2, 7, 6, 56, 1 }, { 33, 42, 9, 2, 1 }, { 27, 10, 16, 38, 55 } };
//			for (int i = 0; i < 4; i++) {
//				for (int j = 0; j < 5; j++) {
//					Console.Write (a[i,j] + " ");
//				}
//				Console.WriteLine ();
//			}
			// 练习2:采用int[][]方式进行声明并初始化,遍历数组元素
//			int[][] a = new int[4][];
//			a [0] = new int[]{3, 5, 8, 15, 4};
//			a [1] = new int[]{ 2, 7, 6, 56, 1 };
//			a [2] = new int[]{ 33, 42, 9, 2, 1 };
//			a [3] = new int[] { 27, 10, 16, 38, 55 };
//			for (int i = 0; i < 4; i++) {
//				for (int j = 0; j < 5; j++) {
//					Console.Write (a[i][j] + " ");
//				}
//				Console.WriteLine ();
//			}
			// 练习3:有一个3行4列的二维数组,要求编程找出最大元素,并输出所在的行和列
//			int[][] a = new int[3][4];
//			int i, j, t, s, b;
//			Console.WriteLine ("输入25个数");
//			for ( i = 0; i < 4; i++) {
//				for ( j = 0; j < 5; j++) {
//					Console.WriteLine (a[i][j]);
//				}
//			}
//			t = a [0] [0];
//			for ( i = 0; i < 4; i++) {
//				for ( j = 0; j < 5; j++) {
//					if (t < a[i][j]) {
//						t = a [i] [j];
//						s = i;
//						b = j;
//					}
//				}
//				Console.WriteLine ("最大数是{0}",t);
//				Console.WriteLine ("位置是{}行{}列",s,b);
//			}
//			int[,] a = {
//				{ 3, 5, 8, 15, 4 },
//				{ 2, 7, 6, 56, 1 }, 
//				{ 33, 42, 9, 2, 1 },
//				{ 27, 10, 16, 38, 55 } 
//			};
//			int t= 0;
//			int t2 = 0;
//			int max = a [0, 0];
//			for (int i = 0; i < 4; i++) {
//				for (int j = 0; j < 5; j++) {
//					if ( a[i,j] > max) {
//						max = a [i, j];
//						t = i;
//						t2 = j;
//					}
//				}
//			}
//			Console.WriteLine ("最大数{0} 在{1}行{2}列",max,t,t2);

			// clone ---会创建一个新的数组出来,他会在托管堆开辟内存空间
//			int[] intOriginArray = new int[4];
//			intOriginArray [0] = 1;
//			intOriginArray [1] = 2;
//			intOriginArray [2] = 3;
//			intOriginArray [3] = 4;
//			// 演示clone方法
//			int[] newArray = (int[]) intOriginArray.Clone();
//			// 遍历newArray
//			foreach (var item in newArray) {
//				Console.WriteLine (item);
//			}

			// copy----容器数组的长度必须大于或等于原数组的长度要保持一致
			// (前拷贝和深拷贝的区别)
//			int[] intOriginArray = new int[4];
//			int[] newArray = { 1, 2, 3, 4 };
//			newArray.CopyTo (intOriginArray, 0);
//			foreach (var item in intOriginArray) {
//				Console.WriteLine (item);
//			}

}// static void Print(ArraySegment<int>[] segements)// {// foreach (var segement in segements) // {// for (int i = segement.Offset; i < segement.Offset + segement.Count; i++) {// Console.WriteLine (segement.Array [i]);// }// }// }}}

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值