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

ArcGIS Pro SDK (五)内容 2 工程项

ArcGIS Pro SDK (五)内容 2 地图工程

目录

  • ArcGIS Pro SDK (五)内容 2 地图工程
      • 1 将文件夹连接项添加到当前工程
      • 2.2 获取所有工程项
      • 2.3 获取工程的所有“MapProjectItems”
      • 2.4 获取特定的“MapProjectItem”
      • 2.5 获取所有“样式工程项”
      • 2.6 获取特定的“样式工程项”
      • 2.7 获取“收藏夹”样式工程项
      • 2.8 获取所有“GDBProjectItems”
      • 2.9 获取特定的“GDBProjectItem”
      • 2.10 获取所有“服务器连接工程项”
      • 2.11 获取特定的“服务器连接工程项”
      • 2.12 获取工程中的所有文件夹连接
      • 2.13 获取特定文件夹连接
      • 2.14 删除特定文件夹连接
      • 2.15 获取特定的“布局工程项”
      • 2.16 获取工程中的所有布局
      • 2.17 获取特定的“地理处理工程项”
      • 2.18 获取工程中的所有地理处理工程项
      • 2.19 在工程中搜索特定工程
      • 2.20 获取默认工程文件夹
      • 2.21 刷新文件夹连接项的子项
      • 2.22 获取工程类别
      • 2.23 使用工程类别
      • 2.24 使用模板创建工程
      • 2.25 选择工程容器 - 用于 SelectItemAsync
      • 2.26 工程项:获取项或查找项
      • 2.27 在目录窗格中选择一个工程

环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0

1 将文件夹连接项添加到当前工程

//添加文件夹连接
string folderPath = "@C:\\myDataFolder";
var folder = await QueuedTask.Run(() =>{//创建文件夹连接工程项var item = ItemFactory.Instance.Create(folderPath) as IProjectItem;//如果成功添加到程项中返回文件夹连接工程项,否则返回nullreturn Project.Current.AddItem(item) ? item as FolderConnectionProjectItem : null;});//添加GDB
string gdbPath = "@C:\\myDataFolder\\myData.gdb";
var newlyAddedGDB = await QueuedTask.Run(() =>{//创建GDB工程项var item = ItemFactory.Instance.Create(gdbPath) as IProjectItem;//如果成功添加到程项中返回GDB工程项,否则返回nullreturn Project.Current.AddItem(item) ? item as GDBProjectItem : null;});

2.2 获取所有工程项

IEnumerable<Item> allProjectItems = Project.Current.GetItems<Item>();
foreach (var pi in allProjectItems)
{//功能代码...
}

2.3 获取工程的所有“MapProjectItems”

IEnumerable<MapProjectItem> newMapItemsContainer = project.GetItems<MapProjectItem>();await QueuedTask.Run(() =>{foreach (var mp in newMapItemsContainer){//对地图做点什么。例如:Map myMap = mp.GetMap();}});

2.4 获取特定的“MapProjectItem”

MapProjectItem mapProjItem = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(item => item.Name.Equals("EuropeMap"));

2.5 获取所有“样式工程项”

IEnumerable<StyleProjectItem> newStyleItemsContainer = null;
newStyleItemsContainer = Project.Current.GetItems<StyleProjectItem>();
foreach (var styleItem in newStyleItemsContainer)
{//对样式做点什么。
}

2.6 获取特定的“样式工程项”

var container = Project.Current.GetItems<StyleProjectItem>();
StyleProjectItem testStyle = container.FirstOrDefault(style => (style.Name == "ArcGIS 3D"));
StyleItem cone = null;
if (testStyle != null)cone = testStyle.LookupItem(StyleItemType.PointSymbol, "Cone_Volume_3");

2.7 获取“收藏夹”样式工程项

var fav_style_item = await QueuedTask.Run(() =>{var containerStyle = Project.Current.GetProjectItemContainer("Style");return containerStyle.GetItems().OfType<StyleProjectItem>().First(item => item.TypeID == "personal_style");});

2.8 获取所有“GDBProjectItems”

IEnumerable<GDBProjectItem> newGDBItemsContainer = null;
newGDBItemsContainer = Project.Current.GetItems<GDBProjectItem>();
foreach (var GDBItem in newGDBItemsContainer)
{//对GDB做点什么
}

2.9 获取特定的“GDBProjectItem”

GDBProjectItem GDBProjItem = Project.Current.GetItems<GDBProjectItem>().FirstOrDefault(item => item.Name.Equals("myGDB"));

2.10 获取所有“服务器连接工程项”

IEnumerable<ServerConnectionProjectItem> newServerConnections = null;
newServerConnections = project.GetItems<ServerConnectionProjectItem>();
foreach (var serverItem in newServerConnections)
{//对server做点什么
}

2.11 获取特定的“服务器连接工程项”

ServerConnectionProjectItem serverProjItem = Project.Current.GetItems<ServerConnectionProjectItem>().FirstOrDefault(item => item.Name.Equals("myServer"));

2.12 获取工程中的所有文件夹连接

//获取当前工程中的所有文件夹连接
var projectFolders = Project.Current.GetItems<FolderConnectionProjectItem>();
foreach (var FolderItem in projectFolders)
{//对文件夹连接做点什么
}

2.13 获取特定文件夹连接

//获取当前工程中的特定文件夹连接
FolderConnectionProjectItem myProjectFolder = Project.Current.GetItems<FolderConnectionProjectItem>().FirstOrDefault(folderPI => folderPI.Name.Equals("myDataFolder"));

2.14 删除特定文件夹连接

// 从工程中删除文件夹连接;未删除本地磁盘或网络上的文件夹
FolderConnectionProjectItem folderToRemove = Project.Current.GetItems<FolderConnectionProjectItem>().FirstOrDefault(myfolder => myfolder.Name.Equals("PlantSpecies"));
if (folderToRemove != null)Project.Current.RemoveItem(folderToRemove as IProjectItem);

2.15 获取特定的“布局工程项”

LayoutProjectItem layoutProjItem = Project.Current.GetItems<LayoutProjectItem>().FirstOrDefault(item => item.Name.Equals("myLayout"));

2.16 获取工程中的所有布局

//获取当前项目中的所有布局
var projectLayouts = Project.Current.GetItems<LayoutProjectItem>();
foreach (var layoutItem in projectLayouts)
{//对布局做点什么
}

2.17 获取特定的“地理处理工程项”

GeoprocessingProjectItem GPProjItem = Project.Current.GetItems<GeoprocessingProjectItem>().FirstOrDefault(item => item.Name.Equals("myToolbox"));

2.18 获取工程中的所有地理处理工程项

//获取当前项目中的所有GeoprocessingProjectItem
var GPItems = Project.Current.GetItems<GeoprocessingProjectItem>();
foreach (var tbx in GPItems)
{//对工具箱做点什么
}

2.19 在工程中搜索特定工程

List<Item> _mxd = new List<Item>();
//获取当前工程中的所有文件夹连接
var allFoldersItem = Project.Current.GetItems<FolderConnectionProjectItem>();
if (allFoldersItem != null)
{//遍历找到的所有文件夹连接项foreach (var folderItem in allFoldersItem){//在该文件夹连接中搜索mxd文件,并将其添加到List<T>//注意:ArcGIS Pro在构建和使用工程时自动创建和动态更新可搜索索引。//将项添加到工程时,它们将被编入索引。//第一次索引文件夹或数据库时,如果它包含大量项目,则索引可能需要一段时间。//创建索引时,搜索不会返回任何结果。_mxd.AddRange(folderItem.GetItems());}
}

2.20 获取默认工程文件夹

//获取Pro的默认项目设置。
var defaultSettings = Project.GetDefaultProjectSettings();
var defaultProjectPath = defaultSettings.LocationPath;
if (defaultProjectPath == null)
{// 如果没有设置,项目将保存在用户的...\My Documents\ArcGIS\Projects文件夹中;// 如果该文件夹不存在,则创建该文件夹。defaultProjectPath = System.IO.Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),@"ArcGIS\Projects");
}

2.21 刷新文件夹连接项的子项

var contentItem = Project.Current.GetItems<FolderConnectionProjectItem>().First();
//var contentItem = ...
//Check if the MCT is required for Refresh()
//检查刷新是否需要使用MCT线程
if (contentItem.IsMainThreadRequired)
{//如果item.IsMainThreadRequired为true,必须使用QueuedTask.Run()//返回trueQueuedTask.Run(() => contentItem.Refresh());
}
else
{//如果item.IsMainThreadRequired为false,任何线程都可以调用Refresh(),但首选BackgroundTask。contentItem.Refresh();//或者通过BackgroundTaskArcGIS.Core.Threading.Tasks.BackgroundTask.Run(() =>contentItem.Refresh(), ArcGIS.Core.Threading.Tasks.BackgroundProgressor.None);
}

2.22 获取工程类别

//获取与项关联的项目类别
Item gdb = ItemFactory.Instance.Create(@"E:\CurrentProject\RegionalPolling\polldata.gdb");
List<ItemCategory> gdbItemCategories = gdb.ItemCategories;

2.23 使用工程类别

//使用ItemCategory作为筛选器浏览项目
IEnumerable<Item> gdbContents = gdb.GetItems();
IEnumerable<Item> filteredGDBContents1 = gdbContents.Where(item => item.ItemCategories.OfType<ItemCategoryDataSet>().Any());
IEnumerable<Item> filteredGDBContents2 = new ItemCategoryDataSet().Items(gdbContents);

2.24 使用模板创建工程

var projectFolder = System.IO.Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),@"ArcGIS\Projects");CreateProjectSettings ps = new CreateProjectSettings()
{Name = "MyProject",LocationPath = projectFolder,TemplatePath = @"C:\data\my_templates\custom_template.aptx"
};var project = await Project.CreateAsync(ps);

2.25 选择工程容器 - 用于 SelectItemAsync

//使用 Project.Current.ProjectItemContainers
var folderContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "FolderConnection");
var gdbContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "GDB");
var mapContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "Map");
var layoutContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "Layout");
var toolboxContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "GP");//或者使用 Project.Current.GetProjectItemContainerfolderContainer = Project.Current.GetProjectItemContainer("FolderConnection");
gdbContainer = Project.Current.GetProjectItemContainer("GDB");
mapContainer = Project.Current.GetProjectItemContainer("Map");
layoutContainer = Project.Current.GetProjectItemContainer("Layout");
toolboxContainer = Project.Current.GetProjectItemContainer("GP");

2.26 工程项:获取项或查找项

//GetItems搜索项内容
var map = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(m => m.Name == "Map1");
var layout = Project.Current.GetItems<LayoutProjectItem>().FirstOrDefault(m => m.Name == "Layout1");
var folders = Project.Current.GetItems<FolderConnectionProjectItem>();
var style = Project.Current.GetItems<StyleProjectItem>().FirstOrDefault(s => s.Name == "ArcGIS 3D");//“查找项”使用目录路径。路径可以是文件或数据集
var fcPath = @"C:\Pro\CommunitySampleData\Interacting with Maps\Interacting with Maps.gdb\Crimes";
var pdfPath = @"C:\Temp\Layout1.pdf";
var imgPath = @"C:\Temp\AddinDesktop16.png";var fc = Project.Current.FindItem(fcPath);
var pdf = Project.Current.FindItem(pdfPath);
var img = Project.Current.FindItem(imgPath);

2.27 在目录窗格中选择一个工程

//获取目录窗格
ArcGIS.Desktop.Core.IProjectWindow projectWindow = Project.GetCatalogPane();
//或者获取活动目录视图……
//ArcGIS.Desktop.Core.IProjectWindow projectWindow = Project.GetActiveCatalogWindow();//eg 在工程中找到一个工具箱
string gpName = "Interacting with Maps.tbx";
var toolbox = Project.Current.GetItems<GeoprocessingProjectItem>().FirstOrDefault(tbx => tbx.Name == gpName);
//在“工具箱”下选择它
projectWindow.SelectItemAsync(toolbox, true, true, null);//Null在第一个容器中选择它-可选的await
//注意:Project.Current.GetProjectItemContainer(“GP”)将得到toolbox container…//假设toolbox也在文件夹容器下。在文件夹下而不是工具箱下选择它
var foldersContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "FolderConnection");
//必须指定容器,因为文件夹排在第二位(在工具箱之后)。
projectWindow.SelectItemAsync(toolbox, true, true, foldersContainer);//optionally await//找到一张地图并选择它
var mapItem = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(m => m.Name == "Map");
//Map只出现在“Maps”下,因此不需要指定容器
projectWindow.SelectItemAsync(mapItem, true, false, null);

相关文章:

ArcGIS Pro SDK (五)内容 2 工程项

ArcGIS Pro SDK &#xff08;五&#xff09;内容 2 地图工程 目录 ArcGIS Pro SDK &#xff08;五&#xff09;内容 2 地图工程1 将文件夹连接项添加到当前工程2.2 获取所有工程项2.3 获取工程的所有“MapProjectItems”2.4 获取特定的“MapProjectItem”2.5 获取所有“样式工程…...

【ai】初识pytorch

初识PyTorch 大神的例子运行: 【ai】openai-quickstart 配置pycharm工程 简单例子初识一下Pytorch 好像直接点击下载比较慢? 大神的代码 在这个例子中,首先定义一个线性模型,该模型有一个输入特征和一个输出特征。然后定义一个损失函数和一个优化器,接着生成一些简单的线性…...

pcl::PointXYZRGBA造成点云无法显示

如果pcd文件没有rgba信息&#xff0c;使用pcl::PointXYZRGBA类型打开会提示以下信息&#xff1a; Failed to find match for field rgba另外&#xff0c;显示出来的点云是黑色&#xff0c;如果使用默认背景色为黑色&#xff0c;就无法显示点云了。 如果设置其它背景色&#xf…...

【论文精读】分类扩散模型:重振密度比估计(Revitalizing Density Ratio Estimation)

文章目录 一、文章概览&#xff08;一&#xff09;问题的提出&#xff08;二&#xff09;文章工作 二、理论背景&#xff08;一&#xff09;密度比估计DRE&#xff08;二&#xff09;去噪扩散模型 三、方法&#xff08;一&#xff09;推导分类和去噪之间的关系&#xff08;二&a…...

kubesphere踩过的坑,持续更新....

踩过的坑 The connection to the server lb.kubesphere.local:6443 was refused - did you specify the right host… 另一篇文档中 dashboard 安装 需要在浏览器中输入thisisunsafe,即可进入登录页面 ingress 安装的问题 问题描述&#xff1a; 安装后通过命令 kubectl g…...

做Android开发怎么才能不被淘汰?

多学一项技能&#xff0c;可能就会成为你升职加薪的利器。经常混迹于各复杂业务线的人&#xff0c;才能跳出重复工作、不断踩坑的怪圈。而一个成熟的码农在于技术过关后&#xff0c;更突出其他技能对专业技术的附加值。 毋须讳言的是&#xff0c;35岁以后你的一线coding能力一…...

异步爬虫:aiohttp 异步请求库使用:

使用requests 请求库虽然可以完成爬虫业务&#xff0c;但是对于异步任务来说&#xff0c;它是做不到的&#xff0c; 这时候我们需要借助 aiohttp 异步请求库来完成异步爬虫的编写&#xff1a; 话不多说&#xff0c;直接看示例&#xff1a; 注意&#xff1a;楼主使用的python版…...

代码随想录算法训练营第四十七天|LeetCode123 买卖股票的最佳时机Ⅲ

题1&#xff1a; 指路&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 买卖股票专题中三者不同的是Ⅰ为只买卖一次&#xff0c;Ⅱ可多次买卖&#xff0c;Ⅲ最多可买卖两次。那么我们将买买卖行为分为五个状态部分(…...

将知乎专栏文章转换为 Markdown 文件保存到本地

一、参考内容 参考知乎文章代码 | 将知乎专栏文章转换为 Markdown 文件保存到本地&#xff0c;利用代码为GitHub&#xff1a;https://github.com/chenluda/zhihu-download。 二、步骤 1.首先安装包flask、flask-cors、markdownify 2. 运行app.py 3.在浏览器中打开链接&…...

【notes2】并发,IO,内存

文章目录 1.线程/协程/异步&#xff1a;并发对应硬件资源是cpu&#xff0c;线程是操作系统如何利用cpu资源的一种抽象2.并发&#xff1a;cpu&#xff0c;线程2.1 可见性&#xff1a;volatile2.2 原子性&#xff08;读写原子&#xff09;&#xff1a;AtomicInteger/synchronized…...

Python题目

实例 3.1 兔子繁殖问题&#xff08;斐波那契数列&#xff09; 兔子从出生后的第三个月开始&#xff0c;每月都会生一对兔子&#xff0c;小兔子成长到第三个月后也会生一对独自。初始有一对兔子&#xff0c;假如兔子都不死&#xff0c;那么计算并输出1-n个月兔子的数量 n int…...

Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南

文章目录 在Tez上优化Hive查询的指南调优指南理解Tez中的并行化理解mapper数量理解reducer数量 并发案例1&#xff1a;未指定队列名称案例2&#xff1a;指定队列名称并发的指南/建议 容器复用和预热容器容器复用预热容器 一般Tez调优参数 在Tez上优化Hive查询的指南 在Tez上优…...

关于小程序内嵌H5页面交互的问题?

有木有遇到&#xff1f;有木有遇到。 小程序内嵌了H5&#xff0c;然后H5某个按钮&#xff0c;需要打开小程序某个页面进行信息完善或登记&#xff0c;登记后要返回H5页面&#xff0c;而H5页面要动态显示刚才在小程序页面登记的信息。 操作流程是这样&#xff1a; 方案1&#…...

Linux下手动查杀木马与Rootkit的实战指南

模拟木马程序的自动运行 黑客可以通过多种方式让木马程序自动运行&#xff0c;包括&#xff1a; 计划任务 (crontab)&#xff1a;通过设置定时任务来周期性地执行木马脚本。开机启动&#xff1a;在系统的启动脚本中添加木马程序&#xff0c;确保系统启动时木马也随之运行。替…...

电商爬虫API的定制开发:满足个性化需求的解决方案

一、引言 随着电子商务的蓬勃发展&#xff0c;电商数据成为了企业决策的重要依据。然而&#xff0c;电商数据的获取并非易事&#xff0c;特别是对于拥有个性化需求的企业来说&#xff0c;更是面临诸多挑战。为了满足这些个性化需求&#xff0c;电商爬虫API的定制开发成为了解决…...

nuc马原复习资料

哲学&#xff1a;世界观的理论形态&#xff0c;或者说是系统化、理论化的世界观&#xff1b;世界观和方法论的统一。马克思主义哲学&#xff1a;辩证唯物主义和历史唯物主义&#xff0c;关于自然。社会和思维发展的普遍规律的学说&#xff0c;无产阶级世界观的理论体系。世界观…...

Node.js是什么(基础篇)

前言 Node.js是一个基于Chrome V8 JavaScript引擎的开源、跨平台JavaScript运行时环境&#xff0c;主要用于开发服务器端应用程序。它的特点是非阻塞I/O模型&#xff0c;使其在处理高并发请求时表现出色。 一、Node JS到底是什么 1、Node JS是什么 Node.js不是一种独立的编程…...

淘客返利平台的微服务架构实现

淘客返利平台的微服务架构实现 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨淘客返利平台的微服务架构设计与实现&#xff0c;旨在提高系统的灵…...

【database1】mysql:DDL/DML/DQL,外键约束/多表/子查询,事务/连接池

文章目录 1.mysql安装&#xff1a;存储&#xff1a;集合&#xff08;内存&#xff1a;临时&#xff09;&#xff0c;IO流&#xff08;硬盘&#xff1a;持久化&#xff09;1.1 服务端&#xff1a;双击mysql-installer-community-5.6.22.0.msi1.2 客户端&#xff1a;命令行输入my…...

模拟木马程序自动运行:Linux下的隐蔽攻击技术

模拟木马程序自动运行&#xff1a;Linux下的隐蔽攻击技术 在网络安全领域&#xff0c;木马程序是一种常见的恶意软件&#xff0c;它能够悄无声息地在受害者的系统中建立后门&#xff0c;为攻击者提供远程访问权限。本文将探讨攻击者如何在Linux系统中模拟木马程序的自动运行&a…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

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 …...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...