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 }, // 这里有两行包含1
            new 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中一维数组的个数3
   for (int i = 0; i < accounts.Length; i++)
   {
     int col = accounts[i].Length;//表示一维数组中其中一维数组的个数,看上面数组a,那么这里数组的个数就为2
     int 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

        // 示例二维List
        List<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);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven jar 包下载失败问题处理

Maven jar 包下载失败问题处理 1.配置好国内的Maven源2.重新下载3. 其他问题 1.配置好国内的Maven源 打开⾃⼰的 Idea 检测 Maven 的配置是否正确&#xff0c;正确的配置如下图所示&#xff1a; 检查项⼀共有两个&#xff1a; 确认右边的两个勾已经选中&#xff0c;如果没有请…

【JavaScript】Web API事件流、事件委托

目录 1.事件流 1.1 事件流和两个阶段说明 1.2 事件捕获 1.3 事件冒泡 1.4 阻止冒泡 1.5 解绑事件 L0 事件解绑 L2 事件解绑 鼠标经过事件的区别 两种注册事件的区别 2.事件委托 案例 tab栏切换改造 3.其他事件 3.1 页面加载事件 3.2 页面滚动事件 3.2 页面滚…

Spring Cloud工程搭建

目录 工程搭建 搭建父子工程 创建父工程 Spring Cloud版本 创建子项目-订单服务 声明项⽬依赖 和 项⽬构建插件 创建子项目-商品服务 声明项⽬依赖 和 项⽬构建插件 工程搭建 因为拆分成了微服务&#xff0c;所以要拆分出多个项目&#xff0c;但是IDEA只能一个窗口有一…

neo4j入门

文章目录 neo4j版本说明部署安装Mac部署docker部署 neo4j web工具使用数据结构图数据库VS关系数据库 neo4j neo4j官网Neo4j是用ava实现的开源NoSQL图数据库。Neo4作为图数据库中的代表产品&#xff0c;已经在众多的行业项目中进行了应用&#xff0c;如&#xff1a;网络管理&am…

selenium记录Spiderbuf例题C03

防止自己遗忘&#xff0c;故作此为记录。 鸢尾花数据集(Iris Dataset) 这道题牵扯到JS动态加载。 步骤&#xff1a; &#xff08;1&#xff09;进入例题&#xff0c;需要找到按钮规律。 flip_xpath: str r"//li/a[onclickgetIrisData({});]" &#xff08;2&…

自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

导入必要的库&#xff1a; import numpy as np import torch import torch.nn as nn import torch.optim as optim from sklearn.metrics import precision_score, recall_score, f1_score 准备数据&#xff1a; class1_points np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5]…

如何运行Composer安装PHP包 安装JWT库

1. 使用Composer Composer是PHP的依赖管理工具&#xff0c;它允许你轻松地安装和管理PHP包。对于JWT&#xff0c;你可以使用firebase/php-jwt这个库&#xff0c;这是由Firebase提供的官方库。 安装Composer&#xff08;如果你还没有安装的话&#xff09;&#xff1a; 访问Co…

《Linux服务与安全管理》| 数据库服务器安装和配置

《Linux服务与安全管理》| 数据库服务器安装和配置 目录 《Linux服务与安全管理》| 数据库服务器安装和配置 任务一&#xff1a; 安装PostgreSQL数据库&#xff0c;设置远程登录&#xff0c;客户端可以成功登录并操作数据库。 任务二&#xff1a; 安装MySQL数据库&#xf…

【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(一)

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;贪心算法篇–CSDN博客 文章目录 一.贪心算法1.什么是贪心算法2.贪心算法的特点 二.例题1.柠…

DRM系列七:Drm之CREATE_DUMB

本系列文章基于linux 5.15 DRM驱动的显存由GEM&#xff08;Graphics execution management&#xff09;管理。 一、创建流程 创建buf时&#xff0c;user层提供需要buf的width,height以及bpp(bite per pixel)&#xff0c;然后调用drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &…

Python从0到100(八十七):CNN网络详细介绍及WISDM数据集模型仿真

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

WPF进阶 | WPF 动画特效揭秘:实现炫酷的界面交互效果

WPF进阶 | WPF 动画特效揭秘&#xff1a;实现炫酷的界面交互效果 前言一、WPF 动画基础概念1.1 什么是 WPF 动画1.2 动画的基本类型1.3 动画的核心元素 二、线性动画详解2.1 DoubleAnimation 的使用2.2 ColorAnimation 实现颜色渐变 三、关键帧动画深入3.1 DoubleAnimationUsin…

实践网络安全:常见威胁与应对策略详解

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 在数字化转型的浪潮中&#xff0c;网络安全的重要性已达到前所未有的高度。无论是个人用户、企业&#xff0c;还是政府机构…

web-SQL注入-CTFHub

前言 在众多的CTF平台当中&#xff0c;作者认为CTFHub对于初学者来说&#xff0c;是入门平台的不二之选。CTFHub通过自己独特的技能树模块&#xff0c;可以帮助初学者来快速入门。具体请看官方介绍&#xff1a;CTFHub。 作者更新了CTFHub系列&#xff0c;希望小伙伴们多多支持…

LabVIEW如何高频采集温度数据?

在LabVIEW中进行高频温度数据采集时&#xff0c;选择合适的传感器&#xff08;如热电偶或热电阻&#xff09;和采集硬件是关键。下面是一些建议&#xff0c;帮助实现高效的温度数据采集&#xff1a; 1. 传感器选择&#xff1a; 热电偶&#xff08;Thermocouple&#xff09;&am…

Deep Sleep 96小时:一场没有硝烟的科技保卫战

2025年1月28日凌晨3点&#xff0c;当大多数人还沉浸在梦乡时&#xff0c;一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击&#xff0c;警报声响彻机房&#xff0c;一场针对中国关键信息基础设施的网络攻击来势汹汹&#xff01; 面对美国发起的这场…

Golang Gin系列-9:Gin 集成Swagger生成文档

文档一直是一项乏味的工作&#xff08;以我个人的拙见&#xff09;&#xff0c;但也是编码过程中最重要的任务之一。在本文中&#xff0c;我们将学习如何将Swagger规范与Gin框架集成。我们将实现JWT认证&#xff0c;请求体作为表单数据和JSON。这里唯一的先决条件是Gin服务器。…

三、递推关系与母函数,《组合数学(第4版)》卢开澄 卢华明

文章目录 一、似函数、非函数1.1 母函数1.2 母函数的简单应用1.3 整数拆分1.4 Ferrers 图像1.5 母函数能做什么1.6 递推关系1.6.1 Hanoi 问题1.6.2 偶数个5怎么算 1.7 Fibonacci 序列1.7.1 Fibonacci 的奇妙性质1.7.2 Fibonacci 恒等式1.7.3 Fibonacci 的直接表达式1.7.4 Fibon…

97,【5】buuctf web [极客大挑战 2020]Greatphp

进入靶场 审代码 <?php // 关闭所有 PHP 错误报告&#xff0c;防止错误信息泄露可能的安全隐患 error_reporting(0);// 定义一个名为 SYCLOVER 的类 class SYCLOVER {// 定义类的公共属性 $sycpublic $syc;// 定义类的公共属性 $loverpublic $lover;// 定义魔术方法 __wa…

手机上运行AI大模型(Deepseek等)

最近deepseek的大火&#xff0c;让大家掀起新一波的本地部署运行大模型的热潮&#xff0c;特别是deepseek有蒸馏的小参数量版本&#xff0c;电脑上就相当方便了&#xff0c;直接ollamaopen-webui这种类似的组合就可以轻松地实现&#xff0c;只要硬件&#xff0c;如显存&#xf…