当前位置: 首页 > article >正文

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);
}

相关文章:

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

数组和列表的基本知识及 LINQ 查询 一、基本知识二、引用命名空间声明三、数组3.1、一维数组3.2、二维数组3.3、不规则数组 Jagged Array 四、列表 List4.1、一维列表4.2、二维列表 五、数组和列表使用 LINQ的操作和运算5.1、一维 LIST 删除所有含 double.NaN 的行5.2、一维 LI…...

PyQt5超详细教程终篇

PyQt5超详细教程 前言 接&#xff1a; [【Python篇】PyQt5 超详细教程——由入门到精通&#xff08;序篇&#xff09;](【Python篇】PyQt5 超详细教程——由入门到精通&#xff08;序篇&#xff09;-CSDN博客) 建议把代码复制到pycahrm等IDE上面看实际效果&#xff0c;方便理…...

【llm对话系统】大模型 Llama 源码分析之归一化方法 RMS Norm

1. 引言 在深度学习中&#xff0c;归一化 (Normalization) 是一种常用的技术&#xff0c;它可以加速模型的训练并提高模型的性能。常见的归一化方法包括 Batch Normalization (BatchNorm)、Layer Normalization (LayerNorm) 等。Llama 模型采用了一种称为 RMS Norm 的归一化方…...

Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南:让Docker拥抱GPU

Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南&#xff1a;让Docker拥抱GPU 前言一、环境准备1.1 验证驱动状态 二、安装NVIDIA Container Toolkit2.1 添加官方仓库2.2 执行安装 三、配置Docker运行时3.1 更新Docker配置 四、验证安装结果4.1 运行测试容器 五、实战应用 …...

青少年编程与数学 02-008 Pyhon语言编程基础 15课题、运用函数

青少年编程与数学 02-008 Pyhon语言编程基础 15课题、运用函数 一、函数的运用1. 问题分解2. 定义函数接口3. 实现函数4. 测试函数5. 组合函数6. 处理错误和异常7. 优化和重构示例&#xff1a;使用函数解决复杂数学问题 二、递归三、递归函数1. 确定基本情况&#xff08;Base C…...

ARM TEE

在ARM的语境中&#xff0c;TEE是Trusted Execution Environment&#xff08;可信执行环境&#xff09;的缩写。ARM TEE就是基于ARM架构实现的可信执行环境&#xff0c;以下是具体介绍&#xff1a; 定义与原理 定义&#xff1a;ARM TEE是基于独立硬件&#xff0c;和主操作系统…...

洛谷 P8724 [蓝桥杯 2020 省 AB3] 限高杆

洛谷题目传送门 题目描述 某市有 n 个路口&#xff0c;有 m 段道路连接这些路口&#xff0c;组成了该市的公路系统。其中一段道路两端一定连接两个不同的路口。道路中间不会穿过路口。 由于各种原因&#xff0c;在一部分道路的中间设置了一些限高杆&#xff0c;有限高杆的路…...

虚幻UE5手机安卓Android Studio开发设置2025

一、下载Android Studio历史版本 步骤1&#xff1a;虚幻4.27、5.0、5.1、5.2官方要求Andrd Studio 4.0版本&#xff1b; 5.3、5.4、5.5官方要求的版本为Android Studio Flamingo | 2022.2.1 Patch 2 May 24, 2023 虚幻官网查看对应Andrd Studiob下载版本&#xff1a; https:/…...

JavaWeb入门-请求响应(Day3)

(一)请求响应概述 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器就可访问,应用程序的逻辑和数据都存储在服务端(维护方便,响应速度一般) CS架构:Client/ser…...

【Rust】18.2. 可辩驳性:模式是否会无法匹配

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 18.2.1. 模式的两种形式 模式有两种形式&#xff1a; 可辩驳的&#xff08;可失败的&…...

【SLAM】于AutoDL云上GPU运行GCNv2_SLAM的记录

配置GCNv2_SLAM所需环境并实现AutoDL云端运行项目的全过程记录。 1. 引子 前几天写了一篇在本地虚拟机里面CPU运行GCNv2_SLAM项目的博客&#xff1a;链接&#xff0c;关于GCNv2_SLAM项目相关的介绍请移步此文章&#xff0c;本文不再重复说明。 GCNv2: Efficient Corresponde…...

SQL进阶实战技巧:某芯片工厂设备任务排产调度分析 | 间隙分析技术应用

目录 0 技术定义与核心原理 1 场景描述 2 数据准备 3 间隙分析法 步骤1:原始时间线可视化...

【自然语言处理(NLP)】基于Transformer架构的预训练语言模型:BERT 训练之数据集处理、训练代码实现

文章目录 介绍BERT 训练之数据集处理BERT 原理及模型代码实现数据集处理导包加载数据生成下一句预测任务的数据从段落中获取nsp数据生成遮蔽语言模型任务的数据从token中获取mlm数据将文本转换为预训练数据集创建Dataset加载WikiText-2数据集 BERT 训练代码实现导包加载数据构建…...

Kotlin判空辅助工具

1&#xff09;?.操作符 //执行逻辑 if (person ! null) {person.doSomething() } //表达式 person?.doSomething() 2&#xff09;?:操作符 //执行逻辑 val c if (a ! null) {a } else {b } //表达式 val c a ?: b 3&#xff09;!!表达式 var message: String? &qu…...

41【文件名的编码规则】

我们在学习的过程中&#xff0c;写出数据或读取数据时需要考虑编码类型 火山采用&#xff1a;UTF-16 易语言采用&#xff1a;GBK php采用&#xff1a;UTF-8 那么我们写出的文件名应该是何种编码的&#xff1f;比如火山程序向本地写出一个“测试.txt”&#xff0c;理论上这个“测…...

使用MATLAB进行雷达数据采集可视化

本文使用轮趣科技N10雷达&#xff0c;需要源码可在后台私信或者资源自取 1. 项目概述 本项目旨在通过 MATLAB 读取 N10 激光雷达 的数据&#xff0c;并进行 实时 3D 点云可视化。数据通过 串口 传输&#xff0c;并经过解析后转换为 三维坐标点&#xff0c;最终使用 pcplayer 进…...

深入解析 CSS 中不常用属性及其相互作用

深入解析 CSS 中不常用属性及其相互作用 **1. CSS 自定义属性&#xff08;CSS Variables&#xff09;****属性示例****作用****布局相关的作用** **2. box-sizing: border-box;****属性示例****作用****布局相关的作用** **3. Flexbox 布局****属性示例****作用****布局相关的作…...

JPA中基本类型集合的映射与操作实例

在Java Persistence API&#xff08;JPA&#xff09;中&#xff0c;我们经常会遇到需要将基本类型集合&#xff08;如List或Set&#xff09;持久化到数据库中的场景。JPA通过ElementCollection注解为我们提供了一种简单而强大的方式来实现这一功能。本文将详细介绍如何使用Elem…...

[MySQL]事务的理论、属性与常见操作

目录 一、事物的理论 1.什么是事务 2.事务的属性&#xff08;ACID&#xff09; 3.再谈事务的本质 4.为什么要有事务 二、事务的操作 1.事务的支持版本 2.事务的提交模式 介绍 自动提交模式 手动提交模式 3.事务的操作 4.事务的操作演示 验证事务的回滚 事务异常…...

沙皮狗为什么禁养?

各位铲屎官们&#xff0c;今天咱们来聊聊一个比较敏感的话题&#xff1a;沙皮狗为什么会被禁养&#xff1f;很多人对沙皮狗情有独钟&#xff0c;但有些地方却明确禁止饲养这种犬种&#xff0c;这背后到底是什么原因呢&#xff1f;别急&#xff0c;今天就来给大家好好揭秘&#…...

Dest1ny漏洞库:用友 U8 Cloud ReleaseRepMngAction SQL 注入漏洞(CNVD-2024-33023)

大家好&#xff0c;今天是Dest1ny漏洞库的专题&#xff01;&#xff01; 会时不时发送新的漏洞资讯&#xff01;&#xff01; 大家多多关注&#xff0c;多多点赞&#xff01;&#xff01;&#xff01; 0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP&#xff0c;主要聚…...

PHP Error处理与优化指南

PHP Error处理与优化指南 引言 在PHP编程中,错误处理是保证程序稳定性和用户体验的关键环节。良好的错误处理机制不仅能帮助开发者快速定位问题,还能提升应用程序的健壮性。本文将详细介绍PHP错误处理的方法、技巧以及优化策略。 一、PHP错误处理概述 1.1 错误类型 PHP中…...

MySQL知识点总结(十八)

说明你对InnoDB集群的整体认知。 MySQL组复制技术是InnoDB集群实现的基础&#xff0c;组复制安装在集群中的每个服务器实例上。组复制能够创建弹性复制拓扑&#xff0c;在集群中的服务器脱机时可以自动重新配置自己。必须至少有三台服务器才能组成一个可以提供高可用性的组。组…...

DeepSeek-R1模型1.5b、7b、8b、14b、32b、70b和671b有啥区别?

deepseek-r1的1.5b、7b、8b、14b、32b、70b和671b有啥区别&#xff1f;码笔记mabiji.com分享&#xff1a;1.5B、7B、8B、14B、32B、70B是蒸馏后的小模型&#xff0c;671B是基础大模型&#xff0c;它们的区别主要体现在参数规模、模型容量、性能表现、准确性、训练成本、推理成本…...

#define,源文件与头文件,赋值表达式

1.#define 1.1定义 #define 是一个预处理指令&#xff0c;用于定义宏 宏&#xff0c;是预处理阶段&#xff08;在编译之前&#xff09;由预处理器处理的代码片段 1.2使用 1.2.1 #define 可以定义常量 #define PI 3.14159 1.2.2 #define 可以定义宏函数 #define SQUARE(x) ((…...

踏入编程世界的第一个博客

我&#xff0c;一个双非一本大一新生&#xff0c;普通的不能再普通了&#xff0c;面对宏伟庞大的计算机世界仍显得举手无措&#xff0c;我自以为自身仍有些许骨气&#xff0c;不想普普通通&#xff0c;甚是浑浑噩噩的度过四年大学&#xff0c;经历了高考的打击&#xff0c;双非…...

5分钟在本地PC上使用VLLM快速启动DeepSeek-R1-Distill-Qwen-32B

5分钟在本地PC上使用VLLM快速启动DeepSeek-R1-Distill-Qwen-32B 前言环境准备所需工具创建虚拟环境安装VLLM及依赖库 模型下载安装Hugging Face CLI下载DeepSeek-R1-Distill-Qwen-32B 模型启动启动命令启动确认 模型验证发送API请求示例输出 注意事项参考链接 前言 VLLM 是一个…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.13 降维打击:扁平化操作的六种武器

1.13 降维打击&#xff1a;扁平化操作的六种武器 目录 #mermaid-svg-bbLxDryjxBbXe3tu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bbLxDryjxBbXe3tu .error-icon{fill:#552222;}#mermaid-svg-bbLxDryjxBbXe3tu…...

Oracle Primavera P6 最新版 v24.12 更新 2/2

目录 一. 引言 二. P6 EPPM 更新内容 1. 用户管理改进 2. 更轻松地标准化用户设置 3. 摘要栏标签汇总数据字段 4. 将里程碑和剩余最早开始日期拖到甘特图上 5. 轻松访问审计数据 6. 粘贴数据时排除安全代码 7. 改进了状态更新卡片视图中的筛选功能 8. 直接从活动电子…...

DeepSeek相关技术整理

相关介绍 2024年12月26日&#xff0c;DeepSeek V3模型发布&#xff08;用更低的训练成本&#xff0c;训练出更好的效果&#xff09;671B参数&#xff0c;激活37B。2025年1月20日&#xff0c;DeepSeek-R1模型发布&#xff08;仅需少量标注数据&#xff08;高质量长cot&#xff…...