C#学习笔记正课十三

1、列表

列表是数据集合类中的一种,数据集合类是数据的集合。

//创建一个列表
List<int> list = new List<int>();
List<int> list1=new List<int>() { 2,5,8,9,6,3};//列表其实是一个泛型

列表的特性
列表内部在存储数据时使用的还是"数组",
当list列表长度发生改变时其实就是创建了一个新的数组并将旧数组中的数据复制到新数组 

列表与数组的异同
1.都只能存储固定类型的元素
2.数组长度是固定的,列表长度是动态的   

列表中的属性
 获取列表元素个数

Console.WriteLine(list1.Count);//获取列表个数

容量:

        如果列表是空的那么容量为0
        如果列表有1个数据容量为4,5个数据容量为8,以此类推

Console.WriteLine(list1.Capacity);//查看容量
list1.Capacity=10;////设置列表容量,如果数据个数超过开始规定的容量大小那么容量就会翻倍。


插入:

list1.Insert(1,2);//列表是什么类型的传入的参数也是什么类型的

   Remove移除:      

        Remove与RemoveAt的区别
        Remove从头开始找移除指定的数据
        RemoveAt移除指定下标的数据
        RemoveAll移除特定条件的元素

list1.RemoveAll(x => x <6);//移除满足()内条件的元素

应用

 List<int> list = new List<int>(20);
 Console.WriteLine(list.Capacity);

 Random r1= new Random();
 for (int i = 0; i <list.Capacity; i++)
 {
     int a = r1.Next(1,51);
     list.Add(a);
 }

 foreach (var item in list)
 {
     Console.Write(item+" ");
 }

 list.RemoveAll(TiaoJian);//list.RemoveAll(x=>x%2==0)

 Console.WriteLine();
 Console.WriteLine("---------------------------------------------");

 foreach (var item in list)
 {
     Console.Write(item + " ");
 }


public static bool TiaoJian(int num)
{
    return (num%2==0);
}

2、判断相等Equals

int a = 10;
int b = 20;
Console.WriteLine(a==b);//用运算符判读相等时,只要发生判断返回的值就是bool类型

引用类型的比较

string a = "张三";
string b = "张三";
Console.WriteLine(a==b);
Console.WriteLine(a.Equals(b));

正常情况引用类型存储的为地址,判断相等时结果应该为false。
但如果是两个string类型的字符串进行比较时,那么会按照字符串的内容进行比较

Student stu1=new Student(22,"小明");
Student stu2=new Student(22,"小明");
Console.WriteLine(stu1.Equals(stu2));//结果为False

引用类型中除了string比较特殊其他类型还是比较地址。

引用类型能让stu1==stu2的方法
1.直接将stu1的值传给stu2
2.使用运算符重载将Equals重写

具体实现:

namespace _0512正课十三2
{
    internal class Program
    {
        static void Main(string[] args)
        {//判断相等Equals
            Student stu1=new Student(22,"小明");
            Student stu2=new Student(22,"小明");
            Console.WriteLine(stu1.Equals(stu2));//重写后进行判断
        }
       
    }
   

    public class Student//创建一个类
    {
        public int Age;
        public string Name;

        public Student(int age, string name)//构造函数传入值
        {
            Age = age;
            Name = name;
        }

        public bool Equals(Student a)//重写的方法
        {
            if (Age ==a.Age&&Name==a.Name)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

3、正则表达式

让ai写。

使用实例一(正则表达式验证邮箱)

 Console.WriteLine("=== 邮箱地址验证工具 ===");
 Console.Write("请输入邮箱地址:");
 string input = Console.ReadLine();

 if (string.IsNullOrWhiteSpace(input))
 {
     Console.WriteLine("输入不能为空!");
     return;
 }

 // 去除前后空格
 string email = input.Trim();

 // 正则验证:允许字母、数字、点、下划线、百分号、加减号、连字符等,域名部分至少包含一个点
 // 常用简化正则:^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
 bool isValid = Regex.IsMatch(email, @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$");

 if (isValid)
     Console.WriteLine($"✓ 邮箱 {input} 合规");
 else
     Console.WriteLine($"✗ 邮箱 {input} 不合规");

 Console.WriteLine("\n按任意键退出...");
 Console.ReadKey();

使用实例二(正则表达式验证手机号)

Console.WriteLine("=== 手机号码验证工具 ===");
Console.Write("请输入手机号码:");
string input = Console.ReadLine();

if (string.IsNullOrWhiteSpace(input))
{
    Console.WriteLine("输入不能为空!");
    return;
}

// 去除前后空格,并处理 +86 或 0086 前缀
string phone = input.Trim();
if (phone.StartsWith("+86"))
phone = phone.Substring(3);
else if (phone.StartsWith("0086"))
phone = phone.Substring(4);

            // 正则验证:1开头,第二位3-9,后面9位数字,共11位
bool isValid = Regex.IsMatch(phone, @"^1[3-9]\d{9}$");

if (isValid)
    Console.WriteLine($"✓ 手机号 {input} 合规");
else
    Console.WriteLine($"✗ 手机号 {input} 不合规");

Console.WriteLine("\n按任意键退出...");
Console.ReadKey();

4、字典

类似于list只能存放类型固定的数据,但是长度不固定。

list通过索引来访问数据,字典通过"键"Key进行访问,而且键不能为空
  
 键的数据类型 有string 、int、 double等····
 在字典中键必须和值搭配使用,list<键的类型,值的类型>
定义一个字典

//定义一个空字典
Dictionary<string,string> keys=new Dictionary<string,string>();


Dictionary<string, string> keys = new Dictionary<string, string>()
{
    {"姓名","良子" },
    {"体型","肥胖"},
    {"身高","160cm" }
};//定义时初始化数据

 keys.Add("年龄", "45");                           向字典中添加数据
 Console.WriteLine(keys.Count);             查看元素数量
 
 Console.WriteLine(keys["姓名"]);           

数组是通过下标来获取指定位置的数据

在字典中通过键来查看数据,字典查看值时是使用索引器

创建一个带列表的字典

List<string> list= new List<string>() { "张三","李四","王五","赵六"};
Dictionary<string, List<string>> keys1 = new Dictionary<string, List<string>>()
{
    {"姓名",list}
};

查看字典中键对应的列表中的数据

 Console.WriteLine(keys1["姓名"][0]);//看下标处的数据

输出键对应列表的数据

//foreach遍历字典中的键,遍历键就会转到对应的list上
foreach (var item in keys1["姓名"])
{
    Console.WriteLine(item);
}
//for循环遍历
for (int i = 0; i < keys1["姓名"].Count; i++)
{
    Console.WriteLine(keys1["姓名"][i]);
}

修改键对应的值

 Dictionary<string, string> keys3 = new Dictionary<string, string>()
 {
     {"姓名","张雪峰" }
 };
 keys3["姓名"] = "科比";
 Console.WriteLine(keys3["姓名"]);//此时输出科比

 查找字典中是否包含某个键

 Console.WriteLine(keys3.ContainsKey("姓名"));

查找字典中是否包含某个值

 Console.WriteLine(keys3.ContainsValue("科比"));

返回字典指定的键

 string sf1 = keys.Keys.First();        //首个键
 string sf2 = keys.Keys.ElementAt(1);   //按下标输出对应键
 string sf3 = keys.Keys.Last();         //最后一个键

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值