黑马程序员_C#数组的学习

/*
    数组的知识点学习
 * 数组是通用的数据结构,在C#当中使用数组,需要创建System.Array类型的对象。
 * 数组是可索引的数据的集合。(数据的类型既可以是内置的,也可以是自定义的)
 * C#当中数组就是对象本身。数组是System.Array类的一个声明的实例,在使用数组的时候,也可以使用此类的所有方法和属性。
 */
namespace MyArray
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = new string[5];//声明一个数组并对它进行实例化。并且分配了5个字符串的内存空间,然后可以给该数组元素添加值。

            string[] str2 = new string[5] { "I", "am", "a", "Array", "object" };//这种方式被称为初始化列表

            //2、关于数组元素的存取
            //存:1、直接通过索引进行存储。 2、通过调用Array类中的SetValue方法进行存储。
            str[0] = "I";
            str.SetValue("am", 1);//参数 object value(要存储的值),int index(索引)

            //取:1、直接通过索引进行获取。2、通过调用Array类中的GetValue方法进行存储。
            string s = str[0];
            string s1 = str.GetValue(1).ToString();//参数:int index 。需要注意的是 获取到的元素的值是一个object类型的值,获取后需要转化为指定的类型,此处为string类型

            //3、常用的检索数组元素数据的方法和属性
            /*
            Length:返回数组所有的维数内的元素的总数量。
             * GetLength:返回指定维数内元素的数量。
             * Rank:返回数组的维数。
             * GetType:返回当前数组实例的类型
            */
            object[] obj = new string[7];
            Type type = obj.GetType();
            if (type.IsArray)
            {
                Console.WriteLine("obj 实例的类型是:{0}", type);//输出:obj 实例的类型是:System.String[]
            }
            else
            {
                Console.WriteLine("该对象不是一个数组!");
            }
            //4、str.GetUpperBound();//参数:int dimension 获取System.Array指定维度的上限,从零开始
            //遍历数组
            for (int i = 0; i <= str.GetUpperBound(0); i++)//需要注意的是这里是"<="  str.Length=str.GetUpperBound(0)+1
            {

            }
            //5、多维数组
            //声明并实例化一个多维数组, C#当中 多维数组的维数可以达到32维
            int[,] arr1 = new int[4, 5];
            int[,] arr2;
            arr2 = new int[4, 5];

            /*
                当初始化带有初始化列表的数组时,不用说明数组的上限,编译器会根据初始化表中的数据计算出每一维的上限
             */
            int[,] arr3 = new int[,] {
            {1,2,3,4,5},
            {1,2,3,4,5},
            {1,2,3,4,5},
            {1,2,3,4,5}
            };
            arr3.SetValue(9, 0, 2);
            Console.WriteLine(arr3.GetValue(0, 2));
            Console.WriteLine(arr3.GetValue(0, 3));
            /*
                多维数组的存取
             * 存:可以通过索引  可以通过 System.Array类中的SetValue方法获取(二位的可以,多维的就不可以使用了)
             * 取:可以通过索引,可以通过 System.Array类中的GetValue(int index1,int index2);维度,索引
             */


            //6、参数数组
            /*
             允许提供任意数量的参数,如果是在多参的方法中使用参数数组,则应把参数数组放在所有参数的后边,否则编译器会报异常
             */
            Console.WriteLine(GetSumArr(1, 2, 3));//6
            Console.WriteLine(GetSumArr(4, 5, 6));//15
            
            //7、锯齿状的数组
            /*
                之前使用逗号对维数分割的数组,每行都有相同元素数量的结构
             * 锯齿状数组是一种每行都能组成数组的数组,它的每一个维度就是一个一维数组。
             * 每一行元素的数量都可能不相同
             */
            int[][] arr4 = new int[5][];//

            int[] i1 = new int[5];
            int[] i2 = new int[6];

            int[][] arr5 = new int[][] { i1, i2 };
            Console.ReadKey();
        }
        /// <summary>
        /// 获取指定int类型数组中元素的总和
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        static int GetSumArr(params int[] arr)
        {
            int sum = 0;
            for (int i = 0; i <= arr.GetUpperBound(0); i++)
            {
                sum += arr[i];
            }
            return sum;
        }


    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大文件拷贝实例源码,学习关于IO文件流、多线程相关使用做参考。 private void button4_Click(object sender, EventArgs e) { this.progressBar1.Value = 0; this.label1.Text = "0%"; if (!File.Exists(this.textBox1.Text)) { MessageBox.Show("找不到目标文件!"); return; } if (!Directory.Exists(this.textBox2.Text)) { MessageBox.Show("请选择有效的保存路径!"); return; } string fileRead = this.textBox1.Text; string fileSave = Path.Combine(this.textBox2.Text, _fileName); System.Threading.ThreadPool.QueueUserWorkItem((o) => { using (IDisposable file = new FileStream(fileRead, FileMode.Open, FileAccess.Read), fileWrite = new FileStream(fileSave, FileMode.Create, FileAccess.Write)) { int count = 0; long fileLength =((FileStream)file).Length; //目标文件大小 //根据目标文件大小创建byte数组长度 byte[] data = new byte[fileLength > 1024 * 1024 * 30 ? 1024 * 1024 * 30 : fileLength]; //30M 1024 * 1024 * 30 int step = (int)Math.Ceiling(fileLength * 1.0 / data.Length); //分流段数 double n = (100 * 1.0 / step); //每次进度条累加 double m = 0; //累加统计 int spam = 1; //时间间隔 double speed = 0; //拷贝速度 do { DateTime time = DateTime.Now; //文件流操作 count = ((FileStream)file).Read(data, 0, data.Length); ((FileStream)fileWrite).Write(data, 0, count); //保存时间间隔,单位毫秒 spam = (DateTime.Now - time).Milliseconds > 0 ? (DateTime.Now - time).Milliseconds : spam;//必须大于0 //计算速度 单位k/s

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值