zoukankan      html  css  js  c++  java
  • c#学习笔记-----数组、集合

    1.0 概述

      数组和集合是非常重要的数据结构(严格意义上集合好像不是基本的数据结构,我当初学的是严蔚敏版的c语言版本的数据结构(考研必备书籍),这本书没有把集合列为最基本的数据结构。),想必只有考过 计算机专业基础综合(专业代码:408)的人都知道数组不是一个很好玩的东西,我记得那个什么KMP算法就是练习数组的一个很好的例子!再过20多天,又不知道有多少人要死在 计算机专业基础综合这个大坑里!哈哈^_^!

        fhbds!

    1.1 数组声明

         数组实际上是由一个变量名称表示一组同一类型的元素,是一种弱键值对关系!有了数组之后,对于批量操作一些同一类型的数据有很大的帮助,比如说你玩的三国杀,斗地主,你手里拿的就是一个数组或者集合!c#中数组有点风骚,不像Java中那样简单!c#中有矩形数组,还有交错数组!数组在使用之前需要声明和初始化!

      矩形数组声明和初始化:

     1  //声明数组
     2            int [ ] array1;//声明一个一维数组
     3            string[ , ] array2; //声明一个二维数组  (Java中这样声明是完全错误的!)
     4            // string [2,3] array3;//编译报错
     5 
     6             //初始化数组的方式
     7             int [] array3 = new int[4];
     8             string [] array4 = {"","","",""};
     9             string [] array5 = new string[4] { "", "", "", "" };//显式
    10 
    11             string [,] array6=new string [3,4];  //3x4
    12             int[,] array7 = new int[,] { {1,2 }, {3,4 }, {5,6} };  //3x2
    13             int[,] array8 = { { 7, 8,9}, { 10, 11, 12}, { 13, 14 ,15} };//子数组长度有限制,所有才有交错数组
    14              
    15             //赋值
    16             array3[0] = 1;
    17             int i = array3[0];
    18             array6[2, 3] = "数组";
    19             string str = array6[2, 3];
    20 
    21             //textBox1.Text = i.ToString();
    22             //textBox1.Text =str;

      交错数组声明初始化:

    1    //交错数组(数组的数组)
    2             int[][] jAarry1 = new int[3][];//jAarry1是3个int数组的 数组
    3 
    4             jAarry1[0] = new int[] {1,2};
    5             jAarry1[1] = new int[] { 4,5,6 };
    6             jAarry1[2] = new int[] {7,8,9};

         矩形数组和交错数组的区别:

    1.2 数组的操作

      数组是system.Array命名空间下的,比较完备的属性和功能如下,一些功能都是通过这些最基本的属性和封装好的方法来实现的(Java中叫API)。

      数组的基本操作无外乎遍历,排序和查找!这三个操作就能实现很多的功能!

      矩形数组的遍历:既可以用for来遍历(需要用到index的时候 use this ),也可以用foreach(只看数组中的元素),也可以直接Array.sort()。这些Java都支持(foreach 结构不是这样的),最近听说Java新出了一个非常牛X的方式来数组!

     1     //数组遍历
     2 
     3             //一维矩形数组
     4             for (int k = 0; k < array4.Length;k++ ) {
     5               //  textBox1.Text += array4[k].ToString();
     6             }
     7 
     8             foreach( var v in array4 ){
     9                 //textBox1.Text += v.ToString();
    10             }
    11 
    12             //多维矩形数组
    13             for (int a = 0; a < array7.GetLength(0); a++)
    14             {
    15                 for (int b = 0; b < array7.GetLength(1); b++)
    16                 {
    17                     //textBox1.Text += array7[a, b] + "  ,";
    18                 }
    19             }
    20 
    21             foreach (var v1 in array8)
    22             {
    23                // textBox1.Text += v1.ToString()+" ,";
    24             }

      交错数组的遍历:

     1   //交错数组
     2             for (int i1 = 0; i1 < jAarry1.Length;i1++ ) {
     3                 for (int j1 = 0; j1 < jAarry1[i1].Length;j1++ ) {
     4                  //   textBox1.Text += jAarry1[i1][j1].ToString()+"  ,";
     5                 }
     6             }
     7 
     8             foreach (var v2 in jAarry1)
     9             {
    10                 foreach (var v22 in v2) {
    11                     //textBox1.Text += v22.ToString()+"   ,";
    12                 }
    13             }
    14             

      数组排序的方式有很多种,也可以基于数据结构中的希尔排序,选择排序,快速排序,基数排序.............,这些排序会在算法时空复杂度上,稳定性,实现上都各有差异,其中冒泡排序是最常使用的一种,冒泡排序是基于选择排序思想的!

     1    //数组排序(冒泡排序)
     2             int [] arr ={5,2,0,1,3,1,4,7,7};
     3             int temp;
     4             for (int m = 0; m < arr.Length-1; m ++ ) {
     5                 for (int n = 0; n < arr.Length - m - 1;n++ )
     6                 {
     7                     if (arr[n] > arr[n + 1])
     8                     {
     9                         //temp = arr[n];
    10                         //arr[n] = arr[n + 1];
    11                         //arr[n + 1] = temp;
    12                         arr[n] = arr[n] ^ arr[n + 1];
    13                         arr[n+1] = arr[n] ^ arr[n + 1];
    14                         arr[n] = arr[n] ^ arr[n + 1];
    15                     }
    16                 }
    17             }
    18             
    19            foreach( var  vv in arr ){
    20             //   textBox1.Text += vv.ToString()+"   ,";
    21            }

      其中使用^运算符会高效点!对于多维数组的排序一般是基于按行或者按列排序,实现价值不太大!

      数组查找是一个非常重要的功能!查找,数据结构也有相应的算法,比较简单的就是顺序查找和折半查找,其中折半查找效率明显高于顺序查找!Java中也是这么去实现的!可以说一维矩形数组Java和c#是非常类似的!

     1           //顺序查找
     2 
     3            int num = 7;
     4            int index = -2;
     5            for (int ii = 0; ii < arr.Length; ii++)
     6            {
     7                if (arr[ii] == num)
     8                {
     9                    //存在 索引值保存下来
    10                    index = ii;
    11                    break;
    12                }
    13            }
    14            textBox1.Text += (index + 1).ToString() + "   ,";
    15 
    16            //折半查找
    17            int low = 0;//头指针
    18            int high = arr.Length - 1;//尾指针
    19            int index = -2;
    20            int number = 10;
    21            while (low <= high)
    22            {
    23                int mid = (low + high) / 2;
    24                if (number > arr[mid])
    25                {
    26                    low = mid + 1;
    27                }
    28                else if (number < arr[mid])
    29                {
    30                    high = mid - 1;
    31                }
    32                else
    33                {
    34                    index = mid;
    35                    break;
    36                }
    37            }
    38 
    39             textBox1.Text += (index+1).ToString() + "   ,";

    2.1 集合

    <  not end  >

    有些鸟儿的羽毛太过耀眼,注定不是关在笼中的那种!
  • 相关阅读:
    Gantt/BTS 生产计划电子看板甘特图
    C# DotNetty TCP对接 松下扣料机
    Vue 和 Zebra 打印机连接直接打印条码
    JavaFx 通信ITC数字广播 SAPI 使用NeoSpeech Liang包生成语音
    Docker RabbitMQ 镜像集群
    游戏匹配实现
    Metro 界面设计案例
    JavaFX 集成 Sqlite 和 Hibernate 开发爬虫应用
    Discuz论坛 自动加好友留言程序
    JavaFX Metro UI 和 开发库
  • 原文地址:https://www.cnblogs.com/wuxinwuxin/p/7834170.html
Copyright © 2011-2022 走看看