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

C#中的Array数组,List集合和ArrayList集合--07

目录

一.Array数组概念的简单理解

1.数组的初始化

2.数组的长度

3.数组的克隆和复制

4.数组的清空

5.数组的查找

6.数组的逆转

7.数组的拓展和缩减

 8.数组的比较

9.数组的合并

10.使用Array类中的静态方法,如Array.Sort,Array.BinarySearch 等

二.Array数组进阶

1.二维数组

2.多维数组

 3.交错数组

4.隐式类型数组

三.List集合

1.基本概念

2.声明和初始化

 3.List集合中的常用方法

四.ArrayList集合

1.基本概念:

2.声明和初始化

3.ArrayList中的常用方法

五.总结

Array(数组)

List

ArrayList

三者之间的异同


一.Array数组概念的简单理解

1.数组的初始化

在C#中,可以在声明数组时同时进行初始化.

数组是一种基本的数据结构,用于存储固定大小的同类型元素集合

创建数组的一般格式:  数组类型[] 数组名称=new数组类型[数组长度]

以下是常见的几种方式

代码示例:

// 一维数组初始化   
int[] numbers = new int[] { 1, 2, 3, 4, 5 };// 简化的语法   
int[] numbers2 = { 1, 2, 3, 4, 5 };// 多维数组初始化   
int[,] matrix = new int[,] { { 1, 2 }, { 3, 4 } };// 交错数组初始化   
int[][] jaggedArray = new int[][]    
{new int[] { 1, 2 },new int[] { 3, 4, 5 }   
};

在完成数组的创建后 ,可以根据数组的索引进行初始化,赋值,访问等操作

注意:数组的索引从0作为起始,以数组的长度减一作为终止

假设一个数组的长度为5

//假设一个数组的长度为5
//int[] arr = new int[5] { 1, 2, 3, 4, 5 };
int[] arr = { 1, 2, 3, 4, 5 };
//数组元素: 1 2 3 4 5
//数组索引: 0 1 2 3 4
Console.WriteLine(arr.Length); //通过Length属性获取数组的长度
Console.WriteLine(arr[3]); // 输出索引为3的元素(输出4)
arr[3]= 100; //修改数组索引为3的元素为100
//数组元素: 1 2 3 100 5
//数组索引: 0 1 2 3   4
Console.WriteLine(arr[3]);// 输出索引为3的元素(输出100)
//Console.WriteLine(arr[5]);  //索引越界,如果强行进行编译,会报如下错误:
//Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.

2.数组的长度

在数组中,Length属性可以获取数组的长度(即数组的元素)

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };   
int length = numbers.Length; // length = 5

3.数组的克隆和复制

在数组中,可以使用Clone方法和Array.Copy方法来复制数组

代码示例:

int[] original = { 1, 2, 3, 4, 5 };// 使用 Clone 方法   
int[] clone = (int[])original.Clone();// 使用 Array.Copy 方法   
int[] copy = new int[original.Length];   
Array.Copy(original, copy, original.Length);

4.数组的清空

Array.Clear方法可以将数组中所有的元素设置为默认值(比如int类型的默认值是0)

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };
Array.Clear(numbers, 0, numbers.Length); // 数组中的所有元素将变为0

5.数组的查找

在C#的数组中可以使用Array.IndexOf和Array.Find等方法去查找特定的元素

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };// 使用 Array.IndexOf   
int index = Array.IndexOf(numbers, 3); // index = 2// 使用 Array.Find
int number = Array.Find(numbers, n => n > 3); // number = 4   

6.数组的逆转

Array.Reverse方法可以翻转数组中的元素顺序

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers); // numbers = { 5, 4, 3, 2, 1 }   

7.数组的拓展和缩减

在C#中一般来说Array数组的大小是在创建时固定的,一旦定义了数组就不能直接更改.

但是可以去使用Array.Resize方法去调整数组的大小

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };   
Array.Resize(ref numbers, 3); // numbers = { 1, 2, 3 }
Array.Resize(ref numbers, 7); // numbers = { 1, 2, 3, 0, 0, 0, 0 }   
//需要注意的是当你增加数组大小时,新增加的位置将被初始化为该类型的默认值(对于数值类型是0,对于引用类型是null)。当你减少数组大小时,超出新长度的元素将被丢弃。

 8.数组的比较

为了比较两个数组是否完全相同,可以通过遍历数组元素逐个比较,或者使用SequenceEqual方法来比较两个数组是否相同.

代码示例:

int[] array1 = { 1, 2, 3 };   
int[] array2 = { 1, 2, 3 };// 使用 SequenceEqual 方法(需要 System.Linq 命名空间)   
bool areEqual = array1.SequenceEqual(array2); // areEqual = true   

9.数组的合并

在C#中,我们可以去使用Concat方法去合并两个数组\

代码示例:

int[] array1 = { 1, 2, 3 };   
int[] array2 = { 4, 5, 6 };// 使用 Concat 方法(需要 System.Linq 命名空间)
int[] merged = array1.Concat(array2).ToArray(); // merged = { 1, 2, 3, 4, 5, 6 }   

10.使用Array类中的静态方法,如Array.Sort,Array.BinarySearch 等

代码示例:

int[] numbers = { 3, 1, 4, 5, 2 };// 使用 Array.Sort 方法进行排序
Array.Sort(numbers); // numbers = { 1, 2, 3, 4, 5 }// 使用 Array.BinarySearch 方法进行二分查找(前提是数组已排序)
int index = Array.BinarySearch(numbers, 4); // index = 3

二.Array数组进阶

1.二维数组

二维数组可以看作是数组的数组,即每个元素都是一个数组.例如,一个2行3列的二维数组可以看作是一个包含2个数组的数组,每个数组包含3个元素

二维数组也能够将其理解为多维数组的一种特殊形式,可以看做一个矩阵或者表格,具有行和列

// 声明一个二维数组   
int[,] matrix = new int[2, 3]; // 2行3列// 初始化一个二维数组   
int[,] initializedMatrix = new int[,]   
{{ 1, 2, 3 },{ 4, 5, 6 }
};// 访问二维数组的元素   
int element = initializedMatrix[1, 2]; // 获取第二行第三列的元素,值为6

二维数组的特点:

  • 二维数组是以矩阵形式存储的
  • 元素通过两个索引访问,第一个索引表示行,第二个索引表示列
  • 在内存中是以行优先顺序存储的

2.多维数组

多维数组通常指代维度大于二的数组,可以用于表示更加复杂的数据结构

下面使用三维数组来举例

// 声明一个三维数组   
int[,,] threeDimensional = new int[2, 3, 4]; // 2个2D数组,每个3行4列// 初始化一个三维数组   
int[,,] initializedThreeDimensional = new int[,,]   
{{{ 1, 2, 3, 4 },{ 5, 6, 7, 8 },{ 9, 10, 11, 12 }},{{ 13, 14, 15, 16 },{ 17, 18, 19, 20 },{ 21, 22, 23, 24 }}   
};// 访问三维数组的元素   
int element = initializedThreeDimensional[1, 2, 3]; // 获取第二个2D数组第三行第四列的元素,值为24

多维数组的特点:

  • 支持多个维度,每个维度可以有不同的大小
  • 通过多个索引访问元素,每个索引对应一个维度。

 3.交错数组

交错数组(或锯齿数组)是数组的数组,其中每个子数组的长度可以不同.

代码示例:

// 声明一个交错数组   
int[][] jaggedArray = new int[3][]; // 3个子数组// 为每个子数组分配不同的长度   
jaggedArray[0] = new int[2]; // 第一个子数组有2个元素   
jaggedArray[1] = new int[3]; // 第二个子数组有3个元素   
jaggedArray[2] = new int[4]; // 第三个子数组有4个元素// 初始化交错数组   
int[][] initializedJaggedArray = new int[][]   
{new int[] { 1, 2 },new int[] { 3, 4, 5 },new int[] { 6, 7, 8, 9 }   
};// 访问交错数组的元素   
int element = initializedJaggedArray[1][2]; // 获取第二个子数组的第三个元素,值为5

交错数组的特点:

  • 每个子数组可以有不同的长度
  • 在内存中,子数组是独立的数组,可以分布在不同的位置

4.隐式类型数组

隐式类型化数组利用C#的类型推断功能,由编译器根据数组的初始值推断数组的类型.

代码示例:

// 使用隐式类型化数组   
var numbers = new[] { 1, 2, 3, 4, 5 };// 编译器推断出 numbers 是一个 int[] 类型的数组// 对于复杂类型   
var complexArray = new[]   
{new { Name = "Alice", Age = 30 },new { Name = "Bob", Age = 25 }
};// 编译器推断出 complexArray 是一个匿名类型数组

隐式类型数组的特点:

  • 编译器根据初始值推断数组的类型,要求所有初始值的类型必须兼容
  • 可以提高代码的可读性,尤其是在复杂类型的情况下

三.List集合

在C#中,List<T>是一个非常常用的泛型集合,它提供了动态数组的功能.与普通数组相比,List<T>具有更灵活的大小调整能力,并且提供了许多方便的方法来操作集合中的元素.以下是关于List<T>的详细信息:

1.基本概念

  • 动态大小:List<T>可以根据需要动态调整其大小.你可以添加或移除元素,而不需要手动管理内存.
  • 泛型支持:List<T>是一个泛型集合,这意味着你可以指定元素的类型,这提供了类型安全性和性能优化.

2.声明和初始化

代码示例:

// 声明一个 List<int>   
List<int> numbers = new List<int>();// 初始化一个 List<string> 并添加元素   
List<string> names = new List<string> { "Alice", "Bob", "Charlie" };

 3.List集合中的常用方法

  1. 添加元素
    numbers.Add(10); // 添加单个元素
    numbers.AddRange(new int[] { 20, 30, 40 }); // 添加多个元素
    
  2. 插入元素
    numbers.Insert(1, 15); // 在索引1处插入元素15
    
  3. 删除元素
    numbers.Remove(10); // 移除值为10的元素
    numbers.RemoveAt(0); // 移除索引0处的元素
    numbers.RemoveRange(0, 2); // 移除从索引0开始的两个元素
    
  4. 访问元素
    int firstNumber = numbers[0]; // 访问第一个元素
    
  5. 查找元素
    int index = numbers.IndexOf(30); // 查找值为30的元素的索引
    bool contains = numbers.Contains(20); // 检查是否包含值为20的元素
    
  6. 排序
    numbers.Sort(); // 对列表进行升序排序
    numbers.Reverse(); // 反转列表顺序
    
  7. 清空列表
    numbers.Clear(); // 移除所有元素
    

List泛型集合的特点:

  • 自动扩容:List<T>内部实现为一个数组,当需要增加容量时,会自动创建一个更大的数组,并将旧数组中的元素复制到新数组中.这个过程可能会影响性能,尤其是在频繁添加大量元素时
  • 索引访问:与数组类似,List<T>支持通过索引访问元素,访问速度很快
  • 线程安全:List<T>不是线程安全的.在多线程环境中使用时,需要手动实现同步

List集合的应用场景 :

  • 频繁更改大小的集合:List<T>非常适合需要频繁添加,删除或调整大小的集合
  • 需要类型安全的集合:由于List<T>是泛型的,它可以确保集合中的所有元素都是同一类型

四.ArrayList集合

ArrayList集合:

ArrayList是 C# 中一种非泛型集合类,用于存储元素列表.它在 .NET Framework 1.0 引入,适用于早期不支持泛型的场景.尽管在现代开发中推荐使用泛型集合如List<T>,但了解 ArrayList仍然有助于理解 C# 集合的演变和处理非泛型数据的方式

1.基本概念:

  • 非泛型:ArrayList可以存储任何类型的对象,因为它存储的是object类型.这意味着你可以在同一个 ArrayList中存储不同类型的数据
  • 动态大小:与List<T>类似,ArrayList可以根据需要自动调整其大小。

2.声明和初始化

代码示例:

// 声明一个 ArrayList   
ArrayList arrayList = new ArrayList();// 初始化并添加元素   
ArrayList mixedList = new ArrayList() { 1, "hello", 3.14, true };

3.ArrayList中的常用方法

  1. 添加元素
    arrayList.Add(10); // 添加单个元素
    arrayList.AddRange(new object[] { "world", 20.5 }); // 添加多个元素
    
  2. 插入元素
    arrayList.Insert(1, "inserted"); // 在索引1处插入元素
    
  3. 删除元素
    arrayList.Remove(10); // 移除指定值的元素
    arrayList.RemoveAt(0); // 移除索引0处的元素
    arrayList.RemoveRange(0, 2); // 移除从索引0开始的两个元素
    
  4. 访问元素
    var firstElement = arrayList[0]; // 访问第一个元素
    
  5. 查找元素
    int index = arrayList.IndexOf("hello"); // 查找元素的索引
    bool contains = arrayList.Contains(3.14); // 检查是否包含某个元素
    
  6. 排序
    arrayList.Sort(); // 对列表进行排序
    
  7. 清空列表
    arrayList.Clear(); // 移除所有元素
    

性能和使用注意:

  • 装箱和拆箱:由于ArrayList存储的是object类型,对于值类型(如int和double),会发生装箱和拆箱操作,可能影响性能
  • 类型安全性:ArrayList不提供编译时类型检查,可能导致运行时错误.例如,尝试将不兼容的类型转换为特定类型时
  • 线程安全:ArrayList不是线程安全的.在多线程环境中使用时,需要手动实现同步

应用场景:

  • 早期代码:在泛型引入之前的旧代码中经常使用ArrayList
  • 需要存储不同类型的集合:在某些情况下,可能需要在同一集合中存储不同类型的对象

五.总结

Array(数组)

特点

固定大小:数组一旦创建,其大小是固定的,不能动态调整。

类型安全:数组是强类型的,定义时需要指定元素类型,所有元素必须是同一类型。

高效访问:由于数组在内存中是连续存储的,访问速度非常快。

优点

性能高:由于连续内存分配和类型安全,数组的访问和遍历速度较快。

简单直接:适合用于已知大小和类型的集合。

缺点

大小固定:不能动态调整大小,需要预先定义。

功能有限:没有提供丰富的集合操作方法。

用法:

int[] numbers = new int[5]; // 创建一个长度为5的整数数组   
numbers[0] = 10; // 设置元素   
int first = numbers[0]; // 访问元素

List<T>

特点

动态大小:List<T>可以根据需要动态调整大小。

泛型支持:提供类型安全,所有元素必须是同一类型。

丰富的方法:提供了许多用于操作集合的内置方法,如添加、插入、删除、排序等。

优点

灵活性高:能够处理动态变化的集合大小。

类型安全:通过泛型提供编译时类型检查。

缺点

性能开销:在需要扩容时,会有一定的性能开销,因为需要分配新数组并复制元素。

用法:

List<int> numbers = new List<int>();   
numbers.Add(10); // 添加元素   
int first = numbers[0]; // 访问元素

ArrayList

特点

动态大小:ArrayList也可以根据需要动态调整大小。

非泛型:可以存储不同类型的对象,因为它存储的是object类型。

较旧的集合类型:在 .NET 1.0 时代引入,在泛型出现之前广泛使用。

优点

灵活性高:可以存储不同类型的对象。

动态调整大小:能够处理动态变化的集合大小。

缺点

类型不安全:没有编译时类型检查,可能导致运行时错误。

性能问题:由于装箱和拆箱操作,性能可能较低。

用法:

ArrayList arrayList = new ArrayList();   
arrayList.Add(10); // 添加元素   
arrayList.Add("string"); // 添加不同类型的元素   
object first = arrayList[0]; // 访问元素

三者之间的异同

  • 类型安全性:Array和List<T>提供类型安全,而ArrayList不提供。
  • 大小调整:Array大小固定,List<T>和 ArrayList大小可动态调整。
  • 性能:Array通常性能最好,List<T>次之,ArrayList由于装箱和拆箱可能性能最差。
  • 使用场景:Array适合固定大小的集合,List<T>适合动态大小且类型一致的集合,ArrayList适合需要存储不同类型对象的旧代码。

相关文章:

C#中的Array数组,List集合和ArrayList集合--07

目录 一.Array数组概念的简单理解 1.数组的初始化 2.数组的长度 3.数组的克隆和复制 4.数组的清空 5.数组的查找 6.数组的逆转 7.数组的拓展和缩减 8.数组的比较 9.数组的合并 10.使用Array类中的静态方法,如Array.Sort,Array.BinarySearch 等 二.Array数组进阶 1.二…...

基于深度学习的视觉检测小项目(十三) 资源文件的生成和调用

在使用 PySide6 进行开发时&#xff0c;管理应用程序的资源&#xff08;如图标、图片、字体、样式表、音视频等&#xff09;是一个常见的任务。PySide6 提供了一个工具 pyside6-rcc&#xff0c;它能够将资源文件&#xff08;.qrc&#xff09;编译成 Python 模块&#xff0c;然后…...

硬件实用技巧:TPS54331DR横杠标识识别1引脚

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/145116969 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

《C++11》nullptr介绍:从NULL说起

在C11之前&#xff0c;我们通常使用NULL来表示空指针。然而&#xff0c;NULL在C中有一些问题和限制&#xff0c;这就是C11引入nullptr的原因。本文将详细介绍nullptr的定义、用法和优点。 1. NULL的问题 在C中&#xff0c;NULL实际上是一个整数0&#xff0c;而不是一个真正的…...

自然语言处理基础:全面概述

自然语言处理基础&#xff1a;全面概述 什么是NLP及其重要性、NLP的核心组件、NLU与NLG、NLU与NLG的集成、NLP的挑战以及NLP的未来 自然语言处理&#xff08;NLP&#xff09;是人工智能&#xff08;AI&#xff09;中最引人入胜且具有影响力的领域之一。它驱动着我们日常使用的…...

网络安全的几种攻击方法

攻击方法 挂马: 就是在别人的网站文件里面放入网页木马或者是将代码潜入到对方正常的网页文件里&#xff0c;以使浏览者中马。 挖洞: 指漏洞挖掘。 加壳: 就是利用特殊的算法&#xff0c;将EXE可执行程序或者DLL动态连接库文件的编码进行改变&#xff08;比如实现压缩、加密&a…...

国内源快速在线安装qt5.15以上版本。(10min安装好)(图文教程)

参考文章&#xff1a;Qt6安装教程——国内源-CSDN博客 1、在国内源上下载qt在线安装工具 NJU Mirror 2、 将下载好的在线安装工具&#xff0c;放到C盘根目录&#xff0c; 2.1 打开windows Powershell&#xff08;WinX&#xff09;&#xff0c;下边那个最好。 输入两条指令&a…...

【pycharm发现找不到python打包工具,且无法下载】

发现找不到python打包工具,且无法下载 解决方法&#xff1a; 第一步&#xff1a;安装distutils&#xff0c;在CMD命令行输入&#xff1a; python -m ensurepip --default-pip第二步&#xff1a;检查和安装setuptools和wheel&#xff1a; python -m pip install --upgrade …...

C++ QT 自绘表盘

文章目录 效果图代码 效果图 代码 代码没什么好说的&#xff0c;直接上源码.h #pragma once#include <QWidget> #include <QPainter> #include <QResizeEvent> #include <QtMath> #include <QCoreApplication>class DialPlateWidget : public …...

数据科学与数据工程:两者的区别与交集

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…...

MAC AndroidStudio模拟器无网络

先确认PC端是正常访问网络的&#xff1b; 模拟器端修改Wifi设置&#xff1a;设置 - 网络和互联网 - WALN设置 按照上图修改&#xff1b; IP设置&#xff1a;从DHCP修改为静态&#xff0c;IP地址&#xff1a;10.0.2.16 &#xff0c;网关&#xff1a;10.0.2.2 &#xff0c; DNS…...

PHP语言的多线程编程

PHP语言的多线程编程 引言 在现代Web开发中&#xff0c;PHP以其简洁和易用性广受欢迎。它常用于构建动态网站和应用程序。然而&#xff0c;PHP本身是单线程的&#xff0c;这意味着它在处理多个任务时可能会受到性能限制。随着互联网的发展&#xff0c;对高并发、高可用性和实…...

当自动包布机遇上Profinet转ModbusTCP网关,“妙啊”,工业智能“前景无限

在自动化控制技术日新月异的当下&#xff0c;Profinet与ModbusTCP这两种协议在工业通信领域占据着举足轻重的地位。ModbusTCP是基于以太网的串行通信协议&#xff0c;而Profinet则是依托工业以太网的现场总线协议。它们在数据传输速度、实时性表现以及兼容性等方面各具特色。不…...

浅析大语言模型安全和隐私保护国内外标准和政策

过去两年&#xff0c;大模型技术已经普及并逐步渗透到各行各业&#xff0c;2025年注定是大模型应用井喷式发展的一年&#xff0c;AI在快速发展的同时&#xff0c;其带来的安全风险也逐渐凸显。人工智能系统的安全性和隐私保护已经成为社会关注的重点。 附下载&#xff1a;600多…...

OpenCV相机标定与3D重建(54)解决透视 n 点问题(Perspective-n-Point, PnP)函数solvePnP()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据3D-2D点对应关系找到物体的姿态。 cv::solvePnP 是 OpenCV 库中的一个函数&#xff0c;用于解决透视 n 点问题&#xff08;Perspective-n-Po…...

Chatper 4: Implementing a GPT model from Scratch To Generate Text

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.1 Coding an LLM architecture4.2 Normalizing activations with layer normalization4.3 Implementing a feed forward network with GELU activations4.4 Adding shortcut connections4.5 Connecting at…...

spring-mvc源码分析v3.3.0

分析下springboot内嵌tomcat启动流程&#xff0c;即springboot-mvc <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.3.0</version> </dependency>环境…...

Rust实现智能助手 - 项目初始化

文章目录 前言环境准备依赖代码运行使用最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;最近准备花一些时间来使用Rust语言实现一个智能助手&#xff0c;希望能够帮助到你。 环境准备 安装Rust语言环境&#xff0c;你可以从官网下载安装包安装。安装Ollama&#xff0c;…...

sparkSQL练习

1.前期准备 &#xff08;1&#xff09;建议先把这两篇文章都看一下吧&#xff0c;然后把这个项目也搞下来 &#xff08;2&#xff09;看看这个任务 &#xff08;3&#xff09;score.txt student_id,course_code,score 108,3-105,99 105,3-105,88 107,3-105,77 105,3-245,87 1…...

QT跨平台应用程序开发框架(2)—— 初识QT

目录 一&#xff0c;创建helloworld 1.1 通过图形化 1.2 通过代码 1.3 通过编辑框 1.4 使用按钮 二&#xff0c;对象树 2.1 关于对象树 2.2 演示释放流程 三&#xff0c;乱码问题 3.1 为什么会有乱码问题 3.2 解决乱码问题 四&#xff0c;认识Qt坐标系 五&#xf…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...