C# 数组和列表的基本知识及 LINQ 查询

数组和列表的基本知识及 LINQ 查询

  • 一、基本知识
  • 二、引用命名空间声明
  • 三、数组
    • 3.1、一维数组
    • 3.2、二维数组
    • 3.3、不规则数组 Jagged Array
  • 四、列表 List
    • 4.1、一维列表
    • 4.2、二维列表
  • 五、数组和列表使用 LINQ的操作和运算
    • 5.1、一维 LIST 删除所有含 double.NaN 的行
    • 5.2、一维 LIST 删除所有含指定数据的行
    • 5.3、一维 LIST 获得非重复的数列
      • 5.3.1、使用 LINQ 的 Distinct 方法
      • 5.3.2、使用 HashSet 方法
    • 5.4、二维 LIST 的声明、初始化和访问
    • 5.5、二维 LIST 使用 LINQ 筛选掉包含 double.NaN 的行及空行
    • 5.6、二维 list<list<T>> 删除 某列值相同的行
      • 5.6.1、保留第一列数据相同的首行的 LIST
      • 5.6.2、保留第一列数据相同的最后一行的 LIST
      • 5.6.3、使用LINQ去重,保留第一列数据相同的首行的 LIST
      • 5.6.4、使用LINQ去重,移除 LIST 第一列所有数据相同的行
  • 六、二维 LIST 和二维数组相互转换
    • 6.1、二维数组 int[,] 与 交错数组 int[][] 的区别
    • 6.2、二维 LIST 转换为 交错数组
    • 6.3、二维 LIST 转换为二维数组
      • 6.3.1、直接转换
      • 6.3.2、使用交错数组作为转换过程
      • 6.3.3、使用 List<数组>作为转换过程
    • 6.4、使用 LINQ,简洁地将二维数组 T[,] 转换为二维 List<List<T>>
  • 七、字符串分割成 List<T>
      • 7.1、字符串分割成 List<字符串>
      • 7.2、字符串分割为 List<int> 或 T 为其他数值类型

一、基本知识

数组和列表是 C# 操作计算数据的基础,配合 LINQ 查询可以实现代码的简洁访问。
LINQ 语言集成查询(Language Integrated Query)是.NET框架的扩展,一系列直接将查询功能集成到 C# 语言的技术统称,是一种使用类似 SQL 语句操作多种数据源的功能。List 类是 ArrayList 类的泛型等效类。数组可以是多维数据。

二、引用命名空间声明

using System;
using System.Linq;
using System.Collections.Generic;

三、数组

3.1、一维数组

double[] OneDimensionalArray = { 1.0, 2.0, double.NaN };

3.2、二维数组

double[,] TwoDimensionalArray = {{ 1.0, 2.0, double.NaN },{ 3.0, 4.0, 5.0 },{ double.NaN, 6.0, 7.0 }}; 

3.3、不规则数组 Jagged Array

也叫交错数组。不同长度的行,可以使用 Jagged Array。使用Jagged Array时,每行的长度可以不同,这在某些情况下比使用List<List>更灵活。选择哪种方式取决于你的具体需求,比如是否需要动态改变行的长度。

int[][] jaggedArray = new int[3][]; // 声明一个三行的数组,每行的长度可以根据需要进行定义和修改。
jaggedArray[0] = new int[] { 1, 2 }; // 第一行有两个元素
jaggedArray[1] = new int[] { 3, 4, 5 }; // 第二行有三个元素
jaggedArray[2] = new int[] { 6 }; // 第三行有一个元素

四、列表 List

4.1、一维列表

List<double> OneDimensionalList = new List<double> { 1.8, 2.9, 3.7, 4.5 , double.NaN };
List<int> OneDimensionalList = new List<int> { 1, 2, 3, 4, 5 };
List<string> OneDimensionalList = new List<string> { "Alice", "Bob", "Charlie" };
List<object> OneDimensionalList = new List<object> { 1, "Hello", 3.14 };

4.2、二维列表

严格不叫二维,但可以等效数组一样操作,姑且这么称呼。

List<List<int>> TwoDimensionalList = new List<List<int>>() {new List<int> { 1, 2, 3 },new List<int> { 4, 5, 6 },new List<int> { 7, 8, 9 },
};List<List<int>> TwoDimensionalList = new List<List<int>>();
TwoDimensionalList.Add(new List<int> { 1, 2, 3 });// 添加行
TwoDimensionalList.Add(new List<int> { 4, 5, 6 });
TwoDimensionalList.Add(new List<int> { 7, 8, 9 });

五、数组和列表使用 LINQ的操作和运算

5.1、一维 LIST 删除所有含 double.NaN 的行

List<double> OneDimensionalList = new List<double> { 1.8, 2.9, 3.7, 4.5 , double.NaN, 168 };
OneDimensionalList.RemoveAll(n => double.IsNaN(n));

5.2、一维 LIST 删除所有含指定数据的行

List<string> OneDimensionalList = new List<string> { 
"Alice TWO Y", 
"Bob WO", 
"Charlie who Y"
"Hi LIST"
};
foreach (string row in OneDimensionalList)
{string[] SplitString = row.Split(' ');//行数据分裂if (SplitString[2] == "Y")//第3个字符等于Y的{OneDimensionalList.RemoveAll(x => x == row);//删除第3列等于字符Y的行}
}// 在指定位置插入元素(例如,在索引为2的位置插入7)OneDimensionalList.Insert(2, 7);// 移除指定值的第一个匹配项(如果有的话)
OneDimensionalList.Remove(7); // 如果7存在,则移除它
OneDimensionalList.RemoveAt(0); // 移除索引为0的元素,即原本的1
OneDimensionalList.Clear(); // 清空列表中的所有元素
bool containsThree = OneDimensionalList.Contains(3); //检查元素是否存在于列表中,如果3存在,返回true,否则返回false
int count =  OneDimensionalList.Count; // 获取列表中的元素数量

5.3、一维 LIST 获得非重复的数列

5.3.1、使用 LINQ 的 Distinct 方法

List<string> OneDimensionalList = new List<string> { 
"Alice TWO Y", 
"Bob WO", 
"Charlie who Y"
"Hi LIST"
"Charlie who Y"
};
OneDimensionalList = OneDimensionalList.Distinct().ToList();//返回非重复的数列
OneDimensionalList.Sort();//排序

5.3.2、使用 HashSet 方法

List<string> OneDimensionalList = new List<string> { 
"Alice TWO Y", 
"Bob WO", 
"Charlie who Y"
"Hi LIST"
"Charlie who Y"
};
HashSet<string> hs = new HashSet<string>(OneDimensionalList); //HashSet存储一组不重复的元素
OneDimensionalList = hs.ToList(); 
OneDimensionalList.Sort();//排序

5.4、二维 LIST 的声明、初始化和访问

//声明新的二维列表
List<List<int>> twoDimensionalList = new List<List<int>>();//初始化二维列表 List ,添加 3 行 4 列
twoDimensionalList.Add(new List<int> { 1, 2, 3, 4 });//添加一维 List 元素
twoDimensionalList.Add(new List<int> { 5, 6, 7, 8 });
twoDimensionalList.Add(new List<int> { 9, 10, 11, 12 });// 获取二维列表行数
int rowCount = twoDimensionalList.Count;// 获取二维列表列数
int columnCount = twoDimensionalList.Count == 0 ? 0 : twoDimensionalList[0].Count;
int cols = twoDimensionalList.Select(row => row.Count).Max(); // 假设所有行长度相同,如果不是,需要处理不一致的情况//简单访问二维 List 元素或值
int element = twoDimensionalList[0][1]; // 获取第一行、第二列元素的值(行索引为 0,列索引为 1),值为 2
Console.WriteLine(element);
twoDimensionalList[1][2] = 5; // 将第二行第三列的元素修改为5//遍历二维列表,控制台输出
foreach (List<int> row in twoDimensionalList)
{foreach (int item in row){Console.Write(item + " ");//控制台调试显示数据}Console.WriteLine();
}foreach (var row in twoDList)
{foreach (var item in row){Console.Write(item + " ");}Console.WriteLine(); // 换行,用于分隔各行
}//遍历二维列表,修改数据,控制台输出,
for (int i = 0; i < rowCount; i++)
{for (int j = 0; j < columnCount; j++){twoDimensionalList[i][j] += 1;//修改数据,二维数据每个数加 1}
}//二维数组或 LIST 控制台显示,采用 Join 输出行数据
foreach (var row in TwoDimensionalArray)
{Console.WriteLine(string.Join(", ", row));
}foreach (var row in TwoDimensionalList)
{Console.WriteLine(string.Join(", ", row));
}//删除列表行,索引默认从零开始
twoDimensionalList.RemoveAt(2);//删除索引 2 的行数据//删除集合中一定范围内的元素,索引默认从零开始
twoDimensionalList.RemoveRange(0, 2);//从索引 0 开始,删除 2 行数据//在列表索引前插入元素(在第二行之前插入)
twoDimensionalList.Insert(1, new List<int> { 15, 16, 17, 18 });//在特定位置插入新行,初始化为 0(在第一行之前插入)
twoDList.Insert(0, new List<int>(Enumerable.Repeat(0, cols)));//初始化一个具有特定大小和内容的二维List
int rows = 3;
int cols = 4;
List<List<int>> twoDList = new List<List<int>>();
for (int i = 0; i < rows; i++)
{twoDList.Add(new List<int>(Enumerable.Repeat(0, cols))); // 添加一个新行,初始化为0
}

5.5、二维 LIST 使用 LINQ 筛选掉包含 double.NaN 的行及空行

 List<List<double>> TwoDimensionalList = new List<List<double>>(){new List<double> {  1.8, 2.9, 3.7, 4.5, 9.9, 168 },new List<double> {  1.8, 2.9, 3.7, 4.5, double.NaN, 168 },new List<double> { }, // 空行new List<double> {  2.8, 3.9, 4.7, 5.5, double.NaN, 668, },new List<double> {  1.8, 2.9, 3.7, 4.5, 9.9, 168 }};TwoDimensionalList = TwoDimensionalList.Where(row => !row.Contains(double.NaN) && row.Any()).ToList();//删除存在 double.NaN 的行及空行// TwoDimensionalList = TwoDimensionalList.Where(row => row.Any()).ToList();//删除空行
// TwoDimensionalList = TwoDimensionalList.Where(row => !row.Contains(double.NaN)).ToList();//删除存在 double.NaN 的行foreach (var row in TwoDimensionalList) { Console.WriteLine(string.Join(" ", row)); }//var filteredData = twoDimensionalList.Where(row => !row.Contains(double.NaN)).ToArray();

5.6、二维 list<list> 删除 某列值相同的行

5.6.1、保留第一列数据相同的首行的 LIST

         List<List<int>> list1 = new List<List<int>>{new List<int> { 1, 2 }, //第一列数据相同的行new List<int> { 3, 4 },new List<int> { 1, 5 }, //第一列数据相同的行new List<int> { 6, 7 },new List<int> { 1, 6 }  //第一列数据相同的行};// 检查第一列(索引为0)int columnIndex = 0;var seen = new HashSet<int>(); // 用于跟踪已经看到的值for (int i = 0; i < list1.Count; i++) // 从 0 索引开始遍历行{if (!seen.Add(list1[i][columnIndex])) // 如果值已存在,则删除当前行{list1.RemoveAt(i); // 如果值已存在,则删除当前行}}foreach (var row in list1){Console.WriteLine(string.Join(", ", row));}Console.WriteLine();

结果:
1, 2
3, 4
6, 7

5.6.2、保留第一列数据相同的最后一行的 LIST

            List<List<int>> list2 = new List<List<int>>{new List<int> { 1, 2 }, //第一列数据相同的行new List<int> { 3, 4 },new List<int> { 1, 5 }, //第一列数据相同的行new List<int> { 6, 7 },new List<int> { 1, 6 }  //第一列数据相同的行};int columnIndex = 0;// 检查第一列(索引为0)var uniqueValues = new HashSet<int>();for (int i = list2.Count - 1; i >= 0; i--) // 从后往前遍历以便安全删除元素{if (!uniqueValues.Add(list2[i][columnIndex])){list2.RemoveAt(i); // 如果值已存在,则删除当前行}}foreach (var row in list2){Console.WriteLine(string.Join(", ", row));}Console.WriteLine(); 

结果:
3, 4
6, 7
1, 6

5.6.3、使用LINQ去重,保留第一列数据相同的首行的 LIST

        List<List<int>> list3 = new List<List<int>>{new List<int> { 1, 2 }, //第一列数据相同的行new List<int> { 3, 4 },new List<int> { 1, 5 }, //第一列数据相同的行new List<int> { 6, 7 },new List<int> { 1, 6 }  //第一列数据相同的行};int columnIndex = 0;// 检查第一列(索引为0)list3 = list3.GroupBy(x => x[columnIndex]).Select(g => g.First()).ToList(); // 去重并保留第一个遇到的元素。foreach (var row in list3){Console.WriteLine(string.Join(", ", row)); // 输出结果。}

结果:
1, 2
3, 4
6, 7

        List<List<int>> list = new List<List<int>>(){new List<int> { 1, 2 }, //第一列数据相同的行new List<int> { 3, 4 },new List<int> { 1, 5 }, //第一列数据相同的行new List<int> { 6, 7 },new List<int> { 1, 6 },  //第一列数据相同的行new List<int> { 1, 2, 3 },//第一列数据相同的行new List<int> { 4, 5, 6 },new List<int> { 1, 7, 8 }, //第一列数据相同的行new List<int> { 9, 10, 11 }};int columnIndex = 0;// 检查第一列(索引为0)// 只保留每组中的第一个元素(如果有重复值的话)list = list.Where((item, index) => index == list.FindIndex(x => x[columnIndex] == item[columnIndex])) .ToList();// 打印结果以验证foreach (var sublist in list){Console.WriteLine(string.Join(", ", sublist));}return;

结果:
1, 2
3, 4
6, 7
4, 5, 6
9, 10, 11

5.6.4、使用LINQ去重,移除 LIST 第一列所有数据相同的行

            List<List<int>> listOfLists = new List<List<int>>(){new List<int> { 1, 2, 3 },new List<int> { 4, 5, 6 },new List<int> { 1, 7, 8 }, // 这里有两行包含1new List<int> { 9, 10, 11 }};// 需要检查的列索引(例如第0列)int columnIndex = 0;// 获取该列的所有值及其出现的次数var duplicates = listOfLists.GroupBy(list => list[columnIndex]).Where(group => group.Count() > 1).Select(group => group.Key).ToList();// 移除所有包含重复值的行listOfLists.RemoveAll(list => duplicates.Contains(list[columnIndex]));// 打印结果以验证foreach (var list in listOfLists){Console.WriteLine(string.Join(", ", list));}

结果:
4, 5, 6
9, 10, 11

六、二维 LIST 和二维数组相互转换

6.1、二维数组 int[,] 与 交错数组 int[][] 的区别

二维 LIST 转换为二维数组 double[][] arrayOfArrays,严格说不是二维数组。
关于 double[][] 是交错数组,它其实是一个 double[] 里嵌套着double[],可以理解为 (double[])[]。

对于int[,],数组的行数和列数如下:

int[,] a=new int[2,3];
int row = a.GetLength(0);  //第一维的长度(即行数)  row=2;
int col = a.GetLength(1); //第二维的长度(即列数)col=3;
int length = a.Length;//二维数组的总长度  lenth=6;

对于交错数组 int[][]

int[][] a = { new int[] { 1, 5 }, new int[] { 7, 3 }, new int[] { 3, 5 } };//accounts.Length表示数组a中一维数组的个数3for (int i = 0; i < accounts.Length; i++){int col = accounts[i].Length;//表示一维数组中其中一维数组的个数,看上面数组a,那么这里数组的个数就为2int sum = 0;for (int j = 0; j < col; j++){sum = sum + accounts[i][j];}         }

6.2、二维 LIST 转换为 交错数组

List<List<double>> TwoDimensionalList = new List<List<double>>
{new List<double> { 1, 2, 3 },new List<double> { 4, 5, 6 },new List<double> { 7, 8, 9 }
};
//此二维数组不是double[,] arrayOfArrays 数组       
double[][] arrayOfArrays = TwoDimensionalList.Select(row => row.ToArray()).ToArray();

6.3、二维 LIST 转换为二维数组

6.3.1、直接转换

List<List<string>> lists = new List<List<string>>()
{new List<string>() { "C", "C++" },new List<string>() { "Java", "Kotlin" }
};string[,] arrays = new string[lists.Count, lists[0].Count];
for (int i = 0; i < lists.Count; i++)
{for (int j = 0; j < lists[i].Count; j++){arrays[i, j] = lists[i][j];}
}//控制台输出二维数组结果
foreach (var array in arrays)
{Console.WriteLine(String.Join(", ", array));
}//控制台输出结果(取数组的行列大小)
for (int i = 0; i < arrays.GetLength(0); i++)
{for (int j = 0; j < arrays.GetLength(1); j++){Console.Write(arrays[i, j] + " ");}Console.WriteLine();
}//控制台输出结果(取lists的行列大小)
int rows = lists.Count;
int cols = lists[0].Count;
for (int i = 0; i < rows; i++)
{for (int j = 0; j < cols; j++){Console.Write(arrays[i, j] + " ");}Console.WriteLine();
}

6.3.2、使用交错数组作为转换过程

List<List<double>> TwoDimensionalList = new List<List<double>>
{
new List<double> { 1, 2, 3 },
new List<double> { 4, 5, 6 },
new List<double> { 7, 8, 9 }
};
//先转换为行列规则的交错数组形式 double[][] arrayOfArrays
double[][] arrayOfArrays = TwoDimensionalList.Select(row => row.ToArray()).ToArray();int rows = arrayOfArrays.Length;//交错数组行数
int cols = arrayOfArrays.Max(array => array.Length);//交错数组列数
double[,] multiDimArray=new double[rows, cols];//声明二维数组
//转换为二维数组
for (int i = 0; i < rows; i++)
{for (int j = 0; j < cols; j++){multiDimArray[i, j] = arrayOfArrays[i][j]; // 直接赋值}
}
//控制台输出结果
for (int i = 0; i < multiDimArray.GetLength(0); i++)
{for (int j = 0; j < multiDimArray.GetLength(1); j++){Console.Write(multiDimArray[i, j] + " ");}Console.WriteLine();
}

6.3.3、使用 List<数组>作为转换过程

方法1

 List<List<int>> TwoDimensionalList = new List<List<int>>() {new List<int> { 1, 2, 3 },new List<int> { 4, 5, 6 },new List<int> { 7, 8, 9 }};
// 将List<List<int>>转换为List<int[]>
var listOfArrays = TwoDimensionalList.Select(row => row.ToArray()).ToList();int[,] array = new int[listOfArrays.Count, listOfArrays[0].Length];
for (int i = 0; i < listOfArrays.Count; i++)
{for (int j = 0; j < listOfArrays[i].Length; j++){array[i, j] = listOfArrays[i][j];}
}// 输出结果验证
for (int i = 0; i < array.GetLength(0); i++)
{for (int j = 0; j < array.GetLength(1); j++){Console.Write(array[i, j] + " ");}Console.WriteLine();
}

方法2

        // 示例二维ListList<List<int>> listOfLists = new List<List<int>>{new List<int> { 1, 2, 3 },new List<int> { 4, 5, 6 },new List<int> { 7, 8, 9 }};// 将List<List<int>>转换为List<int[]>List<int[]> listOfArrays = new List<int[]>();foreach (var list in listOfLists){listOfArrays.Add(list.ToArray());}// 然后将List<int[]>转换为二维数组int[,]int[,] array = new int[listOfArrays.Count, listOfArrays[0].Length];for (int i = 0; i < listOfArrays.Count; i++){for (int j = 0; j < listOfArrays[i].Length; j++){array[i, j] = listOfArrays[i][j];}}// 输出结果验证for (int i = 0; i < array.GetLength(0); i++){for (int j = 0; j < array.GetLength(1); j++){Console.Write(array[i, j] + " ");}Console.WriteLine();}

6.4、使用 LINQ,简洁地将二维数组 T[,] 转换为二维 List<List>

int[,] TwoDimensionalArray = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int rowCount = TwoDimensionalArray.GetLength(0);
int colCount = TwoDimensionalArray.GetLength(1);List<List<int>> TwoDimensionalList = Enumerable.Range(0, rowCount).Select(i => Enumerable.Range(0, colCount).Select(j => TwoDimensionalArray[i, j]).ToList()).ToList();

七、字符串分割成 List

7.1、字符串分割成 List<字符串>

string input = "apple,banana,cherry";
List<string> result = new List<string>(input.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries));

7.2、字符串分割为 List 或 T 为其他数值类型

string input = "1,2,3,4,5";
List<int> result = input.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();foreach (var item in result)
{Console.WriteLine(item);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10944.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hot100之普通数组

53最大子数组和 题目 思路解析 我们用一个dp数组来收集我们从左往右&#xff0c;加起来的最大的和 也就是我们的节点不是负数&#xff0c;那我们直接收集就好了 如果是负数&#xff0c;我们就用Max&#xff08;&#xff09;比较是这个节点大还是当前节点大&#xff08;这个情…

如何利用天赋实现最大化的价值输出-补

原文&#xff1a; https://blog.csdn.net/ZhangRelay/article/details/145408621 ​​​​​​如何利用天赋实现最大化的价值输出-CSDN博客 如何利用天赋实现最大化的价值输出-CSDN博客 引用视频差异 第一段视频目标明确&#xff0c;建议也非常明确。 录制视频的人是主动性…

新能源算力战争:为什么AI大模型需要绿色数据中心?

新能源算力战争:为什么AI大模型需要绿色数据中心? 近年来,人工智能(AI)大模型的爆发式增长正在重塑全球科技产业的格局。以GPT-4、Gemini、Llama等为代表的千亿参数级模型,不仅需要海量数据训练,更依赖庞大的算力支撑。然而,这种算力的背后隐藏着一个日益严峻的挑战——…

Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)

目录 前言1. 基本知识2. Demo3. 实战代码 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&am…

unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等

目录 1 场景数量 SceneManager.sceneCount 2 直接代码生成新场景 SceneManager.CreateScene 3 场景的加载 3.1 用代码加载场景&#xff0c;仍然build setting里先加入配置 3.2 卸载场景 SceneManager.UnloadSceneAsync(); 3.3 同步加载场景 SceneManager.LoadScene 3.3.…

【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例

目录 说明举例 说明 简单来说&#xff0c;android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要&#xff0c;而是多个控件的属性值之比发挥作用&#xff0c;例如有2个控件&#xff0c;各自的android:layout_weight的值设为0.5和0.5&#xff0…

hot100_21. 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[…

4 [危机13小时追踪一场GitHub投毒事件]

事件概要 自北京时间 2024.12.4 晚间6点起&#xff0c; GitHub 上不断出现“幽灵仓库”&#xff0c;仓库中没有任何代码&#xff0c;只有诱导性的病毒文件。当天&#xff0c;他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒&#xff0c;等待不…

Spring Boot项目中解决跨域问题(四种方式)

目录 一&#xff0c;跨域产生的原因二&#xff0c;什么情况下算跨域三&#xff0c;实际演示四&#xff0c;解决跨域的方法 1&#xff0c;CrossOrigin注解2&#xff0c;添加全局过滤器3&#xff0c;实现WebMvcConfigurer4&#xff0c;Nginx解决跨域5&#xff0c;注意 开发项目…

浅析DNS污染及防范

DNS污染&#xff08;DNS Cache Poisoning&#xff09;是一种网络攻击手段&#xff0c;通过篡改DNS服务器的缓存数据&#xff0c;将域名解析结果指向错误的IP地址&#xff0c;从而误导用户访问恶意网站或无法访问目标网站。这种攻击利用了DNS协议的特性&#xff0c;例如“只认第…

五. Redis 配置内容(详细配置说明)

五. Redis 配置内容(详细配置说明) 文章目录 五. Redis 配置内容(详细配置说明)1. Units 单位配置2. INCLUDES (包含)配置3. NETWORK (网络)配置3.1 bind(配置访问内容)3.2 protected-mode (保护模式)3.3 port(端口)配置3.4 timeout(客户端超时时间)配置3.5 tcp-keepalive()配置…

单细胞分析基础-第一节 数据质控、降维聚类

scRNA_pipeline\1.Seurat 生物技能树 可进官网查询 添加链接描述 分析流程 准备:R包安装 options("repos"="https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packages("BiocManager",update = F,ask =…

Qt常用控件 输入类控件

文章目录 1.QLineEdit1.1 常用属性1.2 常用信号1.3 例子1&#xff0c;录入用户信息1.4 例子2&#xff0c;正则验证手机号1.5 例子3&#xff0c;验证输入的密码1.6 例子4&#xff0c;显示密码 2. QTextEdit2.1 常用属性2.2 常用信号2.3 例子1&#xff0c;获取输入框的内容2.4 例…

大模型培训讲师老师叶梓分享:DeepSeek多模态大模型janus初探

以下视频内容为叶梓分享DeepSeek多模态大模型janus的部署&#xff0c;并验证其实际效果&#xff0c;包括图生文和文生图两部分。 叶梓老师人工智能培训分享DeepSeek多模态大模型janus初探 DeepSeek 的多模态大模型 Janus 是一款强大的 AI 模型&#xff0c;专注于图像和文本的多…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

17.2 图形绘制7

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 17.2.9 字体 17.2.9.1 Font类 Font类定义特定的文本格式&#xff0c;包括字体、字号和样式特性。 Font常用属性&#xff1a; Na…

浅析DDOS攻击及防御策略

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种通过大量计算机或网络僵尸主机对目标服务器发起大量无效或高流量请求&#xff0c;耗尽其资源&#xff0c;从而导致服务中断的网络攻击方式。这种攻击方式利用了分布式系统的特性&#xff0c;使攻击规模更大、影响范围更广…

90,【6】攻防世界 WEB Web_php_unserialize

进入靶场 进入靶场 <?php // 定义一个名为 Demo 的类 class Demo { // 定义一个私有属性 $file&#xff0c;默认值为 index.phpprivate $file index.php;// 构造函数&#xff0c;当创建类的实例时会自动调用// 接收一个参数 $file&#xff0c;用于初始化对象的 $file 属…

HarmonyOS NEXT:保存应用数据

用户首选项使用 用户首选项的特点 数据体积小、访问频率高、有加载速度要求的数据如用户偏好设置、用户字体大小、应用的配置参数。 用户搜选项&#xff08;Preferences&#xff09;提供了轻量级配置数据的持久化能力&#xff0c;支持订阅数据变化的通知能力。不支持分布式同…

C++编程语言:抽象机制:模板(Bjarne Stroustrup)

目录 23.1 引言和概观(Introduction and Overview) 23.2 一个简单的字符串模板(A Simple String Template) 23.2.1 模板的定义(Defining a Template) 23.2.2 模板实例化(Template Instantiation) 23.3 类型检查(Type Checking) 23.3.1 类型等价(Type Equivalence) …