VR引擎10.24

67 阅读6分钟
namespace demo_10_24
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //判断某个子串在我们字符串中的位置 $ ^
            //断言:就是帮我们定位找到满足的子串 定位位置左边和右边
            //左边断言(?<=条件)字符串必须满足左边是某个条件的正则
            //(?<!条件)括号中不参与匹配,只帮我们定位
            //右边断言(?=条件)字符串必须满足有边是某个条件的正则
            //(?!条件)

            //把你们的当前文件夹目录中的所有TXT文件匹配
            /*string[] files=Directory.GetFiles("./"); 
            string pattern = @"(?<=\./).+(?=\.txt)";

            foreach(string i in files)
            {
                Match match = Regex.Match(i, pattern);
                if(match.Success)
                Console.WriteLine(match);
            }*/



            //使用()去匹配我们要的子串
            /*string pattern = @"./(.+)\.txt$";
            string[] files = Directory.GetFiles("./");
            foreach (string i in files)
            {
                Match match = Regex.Match(i, pattern);
                Console.WriteLine(match.Groups[0]); //下标0就是我们匹配到的子串
                Console.WriteLine(match.Groups[1]);
                //现在我想拿到括号中的字符串,下标1表示第一个括号中匹配的内容

            }
*/
            //第三种方式获取中间子串(?<占位符>正则*?)
            /* string pattern = @"\./(?<fileName>.+).txt$"; //匹配左边是./右边是.txt而且.txt必须是结尾
             string[] files = Directory.GetFiles("./");
             foreach (string i in files)
             {
                 Match match = Regex.Match(i, pattern);
                 Console.WriteLine(match.Groups["fileName"]);
             }
 */
     

            //匹配一个日期格式 2022-10-18
            /*  while (true)
              {
                  string pattern1 = @"^[0-2][0-9]{3}-([0][1-9]|[1][0-2])-([0][1-9]|[1-2][0-9]|[3][0-1])$";
                  string qq = Convert.ToString(Console.ReadLine());
                  Console.WriteLine(Regex.IsMatch(qq, pattern1));

              }*/
        }
    }
}
    
 using System.Collections;
namespace demo_10_24pm
{
    /*public class Person
    {
        public string name;
    }*/
    internal class Program
    {
        static void Main(string[] args)
        {
            //ArrayList动态数组 List列表 Dictionary字典
            //栈 队列 哈希表
            //创建一个栈
            /*   Stack stack = new Stack();
               //入栈
               stack.Push(1); //入栈的数据类型可以不相同
               stack.Push("werty");
               stack.Push(new Person());*/
            //查看栈中的值 只能读到栈顶的值
            //Console.WriteLine(stack.Peek);

            //怎么获取栈的长度 stack.Count
            //int length = stack.Count;

            //想要读取里面所有的值
            /*for (int i=0; i<length; i++)   
            {
              
                object j = stack.Peek();  //object可以代表所有的类型
                Console.WriteLine(j);
                stack.Pop(); //Pop出栈
            }*/

            //第二种方式 while循环
            /* while(stack.Count > 0)
             {
                 object j = stack.Peek();  
                 Console.WriteLine(j);
                 stack.Pop();
             }*/
            // Console.WriteLine(stack.Contains("werty"));  //可以检查栈中是否存在该元素 返回一个布尔值



            //练习1:编写一个方法计算任意一个十进制数的二进制数,使用栈的结构方式存储,之后打印出来
            /*  static void getBin(int num) 
               {
                   Stack stack = new Stack();

                   while (num  >0) //相除结果不为0时
                   {
                       int remanier =num % 2;
                       //入栈
                       stack.Push(remanier);
                     //num要发生变化
                     num/=2;

                  }
                   //出栈
                   while(stack.Count > 0)
                   {
                       Console.Write(stack.Peek());
                       stack.Pop();
                   }
              }
               Console.WriteLine("请输入一个十进制的数:");
               int num=Convert.ToInt32(Console.ReadLine());
               getBin(num);*/


            //
            //

            /*   Queue queue = new Queue();
                  //入队列
                  queue.Enqueue("asdf");
                  queue.Enqueue("34");
                  queue.Enqueue("name");

                  //出队列
                  queue.Dequeue(); //asdf出队列了
                  //拿到队头的值
                  Console.WriteLine(queue.Peek()); //所以对头是34
                  Console.WriteLine(queue.Count);
                  //循环遍历
                  while(queue.Count > 0)
                  {
                      Console.WriteLine(queue.Peek());
                      queue.Dequeue();
                  }
                  Console.WriteLine(queue.Contains(34));
                  queue.Clear();
                  Console.WriteLine(queue);*/

            /*练习2:使用队列存储消息,一次性存10条消息,每隔一秒打印一条消息,控制台打印消息时要有明显的停顿感,
                            每隔一秒使用Thread.Sleep(1000)*/

            Random random = new Random();
            List<string> news = new List<string>() { "喜迎二十大","研制出克制癌症的疫苗","俄乌冲突"};
            Queue queue = new Queue();
            for(int i = 0; i < 10; i++)
            {
                string str = news[random.Next(0, news.Count)];
                queue.Enqueue(str);
            }
           while(queue.Count > 0)
            {
                Console.WriteLine(queue.Peek());
                queue.Dequeue();
                Thread.Sleep(1000);
            }

        }
            }
}  using System.Text.RegularExpressions;


一、使用JSON进行数据传输

1.什么是JSON

JSON官网www.json.org/json-zh.htm… JSON (JavaScript Object Notation) 的轻量级数据交换格式能够替代XML进行数据传输,首先,它是一个字符串,一个有规则的字符串。然后它的表现形式是键值对的,有点像我们前面学的字典Dictionary,以下是JSON的格式,我们可以看到是一组组键值对,在做web开发的时候我们 就是通过JSON来实现接口数据的传输,我们可以看到JSON数据是非常直观的,更易于我们理解和查看,而且JSON也是支持c#的。

2.JSON的语法规则

image.png 根节点可以是对象也可以是数组

{
  "person": {
    "name": "pig",
    "age": "18",
    "sex": "man",
    "hometown": {
      "province": "江西省",
      "city": "抚州市",
      "county": "崇仁县"
    }
  }
}
复制代码

也可以是数组的形式

[   {    "name": "pig",    "age": "18",    "sex": "man"    },       {    "name": "cate",    "age": "12",    "sex": "woman"    }  ]
复制代码

重写类中的ToString()方法,这样我们去打印对象的时候会打印出对应字段或属性 image.png

3.书写JSON文本

image.png

4.引入JSON库文件(LitJSON)

1.两种引入LitJSON的方式

(1) 在项目依赖中引入LitJSON.dll文件

image.png (2) 在项目依赖的NuGet中搜索LitJSON进行添加 image.png

image.png

2.使用泛型去解析JSON(转成对象数组或者list列表)

注意开头要:using:LitJSON image.png 也可以转成list列表

image.png

5.将对象转成JSON格式的字符串

image.png

6.京东练习题

获取京东首页的一级菜单,拿到每一组菜单放到数组中,然后该数组作为对象的一个字段Firstmenu,最后将对象放到数组中,然后将数组转成json字符串写到1.txt文件中

image.png

7.相关链接:

Json校验格式化工具:  www.bejson.com/

Josn编辑器:  www.bejson.com/jsoneditoro…

二、其他几种数据集合

1.栈Stack

Stack是c#为我们封装好的一个类,本质是Object[]数组,只是封装了特殊的存储规则,Stack是栈存储容器,栈是一种先进后出的数据结构,先存入的数据后获取,后存入的数据先获取

image.png

1.创建一个栈对象

需要using:System.collections; image.png

2.栈的相关操作

  1. 压(入)栈

image.png

  1. 弹栈,刚才最后入栈的是new Test(),所以等下出栈第一个应该是一个对象

image.png

  1. 查询栈中的值
  • 查看栈顶的值 image.png
  • 查看元素是否在栈中 image.png
  1. 栈中改变元素只能是压栈和弹栈还有清空

image.png

  1. 获取栈中的长度 stack.Count
  2. 使用foreach遍历栈

image.png

  1. 循环弹栈

image.png

3.栈的相关练习题

编写一个方法计算任意一个十进制数的二进制数,使用栈的结构方式存储,之后打印出来

image.png

2.队列Queue

Queue是一种先进先出的数据结构,就像我们排队一样,先排在前面的人先出去 image.png

1.队列的相关操作

  1. 入队列

image.png

  1. 出队列

image.png

  1. 查询队列

image.png

image.png

  1. 删除队列

image.png

  1. 遍历队列

image.png

2.队列练习题

使用队列存储消息,一次性存10条消息,每隔一秒打印一条消息,控制台打印消息时要有明显的停顿感,每隔一秒使用Thread.Sleep(1000)

image.png

3.哈希表Hashtable

1.Hashtable的本质

Hashtable又称散列表,是基于键的哈希代码组织起来的键值对,它的主要作用是提高数据查询的效率,使用键来访问集合中的元素,注意我们讲的都是集合类,所有都在 System.Collections

2.增加键值对

image.png

3. 删除键值对

image.png

4.查询哈希表中的键和值

image.png

image.png

5.改

image.png

6.遍历

  1. 得到键值对个数

image.png 2. 遍历所有键名

image.png

  1. 遍历所有值

image.png

  1. 遍历键值对

image.png

7. 练习题

使用类和哈希表制作怪物存储器,每个怪物都有自己唯一的id,我们每添加一个怪物就将怪物添加到哈希表中,键名为id,值为怪物对象,类中还有删除怪物的方法,每次删除就从哈希表中移除对象

4.链表

链表分单向链表和双向链表,单向链表中每一个元素都存储着另外一个元素的内存地址,这样每个元素就互相连接起来了,双向链表中放着两个元素的内存地址。

image.png

1.实现一个简单的单向链表LinkList类

image.png

2.c#提供的LinkedList类

  1. 创建一个双向链表

image.png 2. 往链表中添加元素

image.png 3. 在指定节点的后面和前面插入节点

image.png

  1. 移除节点

image.png

  1. 查找节点

image.png

  1. 判断节点是否存在

image.png

  1. 使用foreach遍历

image.png

  1. Next获取下节点,Perivious获取上一个节点

image.png

  1. 通过节点去遍历

image.png