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的语法规则
根节点可以是对象也可以是数组
{
"person": {
"name": "pig",
"age": "18",
"sex": "man",
"hometown": {
"province": "江西省",
"city": "抚州市",
"county": "崇仁县"
}
}
}
复制代码
也可以是数组的形式
[ { "name": "pig", "age": "18", "sex": "man" }, { "name": "cate", "age": "12", "sex": "woman" } ]
复制代码
重写类中的ToString()方法,这样我们去打印对象的时候会打印出对应字段或属性
3.书写JSON文本
4.引入JSON库文件(LitJSON)
1.两种引入LitJSON的方式
(1) 在项目依赖中引入LitJSON.dll文件
(2) 在项目依赖的NuGet中搜索LitJSON进行添加
2.使用泛型去解析JSON(转成对象数组或者list列表)
注意开头要:using:LitJSON 也可以转成list列表
5.将对象转成JSON格式的字符串
6.京东练习题
获取京东首页的一级菜单,拿到每一组菜单放到数组中,然后该数组作为对象的一个字段Firstmenu,最后将对象放到数组中,然后将数组转成json字符串写到1.txt文件中
7.相关链接:
Json校验格式化工具: www.bejson.com/
Josn编辑器: www.bejson.com/jsoneditoro…
二、其他几种数据集合
1.栈Stack
Stack是c#为我们封装好的一个类,本质是Object[]数组,只是封装了特殊的存储规则,Stack是栈存储容器,栈是一种先进后出的数据结构,先存入的数据后获取,后存入的数据先获取
1.创建一个栈对象
需要using:System.collections;
2.栈的相关操作
- 压(入)栈
- 弹栈,刚才最后入栈的是new Test(),所以等下出栈第一个应该是一个对象
- 查询栈中的值
- 查看栈顶的值
- 查看元素是否在栈中
- 栈中改变元素只能是压栈和弹栈还有清空
- 获取栈中的长度 stack.Count
- 使用foreach遍历栈
- 循环弹栈
3.栈的相关练习题
编写一个方法计算任意一个十进制数的二进制数,使用栈的结构方式存储,之后打印出来
2.队列Queue
Queue是一种先进先出的数据结构,就像我们排队一样,先排在前面的人先出去
1.队列的相关操作
- 入队列
- 出队列
- 查询队列
- 删除队列
- 遍历队列
2.队列练习题
使用队列存储消息,一次性存10条消息,每隔一秒打印一条消息,控制台打印消息时要有明显的停顿感,每隔一秒使用Thread.Sleep(1000)
3.哈希表Hashtable
1.Hashtable的本质
Hashtable又称散列表,是基于键的哈希代码组织起来的键值对,它的主要作用是提高数据查询的效率,使用键来访问集合中的元素,注意我们讲的都是集合类,所有都在 System.Collections中
2.增加键值对
3. 删除键值对
4.查询哈希表中的键和值
5.改
6.遍历
- 得到键值对个数
2. 遍历所有键名
- 遍历所有值
- 遍历键值对
7. 练习题
使用类和哈希表制作怪物存储器,每个怪物都有自己唯一的id,我们每添加一个怪物就将怪物添加到哈希表中,键名为id,值为怪物对象,类中还有删除怪物的方法,每次删除就从哈希表中移除对象
4.链表
链表分单向链表和双向链表,单向链表中每一个元素都存储着另外一个元素的内存地址,这样每个元素就互相连接起来了,双向链表中放着两个元素的内存地址。
1.实现一个简单的单向链表LinkList类
2.c#提供的LinkedList类
- 创建一个双向链表
2. 往链表中添加元素
3. 在指定节点的后面和前面插入节点
- 移除节点
- 查找节点
- 判断节点是否存在
- 使用foreach遍历
- Next获取下节点,Perivious获取上一个节点
- 通过节点去遍历