Unity中Stack<T>用法以及删除Stack<GameObject>的方法

news2025/3/7 7:24:58

Unity中Stack用法以及删除Stack的方法

  • 介绍
  • Stack<T>的API
    • Stack<T> 常用方法
    • 创建和初始化 Stack<T>
    • Push 和 Pop 操作
    • Stack<T>遍历
    • 清空栈
    • 检查栈是否包含某个元素
  • 栈的典型应用场景
    • 撤销操作
    • 深度优先搜索(DFS)
    • 注意事项
  • 总结

介绍

因为之前很少使用Stack这个表,然后在做对象池的时候用了一下然后发现我的对象有时候无法删除,然后这里我分享一下Stack的用法和删除方式。

Stack的API

Stack是先进后厨的集合类,在System.Collections.Generic命名空间中;
通常用在临时存储和特定顺序处理数据,比如撤销操作、递归算法、深度优先搜索等。

Stack 常用方法

Push(T item):将元素添加到栈顶。
Pop():移除并返回栈顶的元素。
Peek():返回栈顶的元素但不移除它。
Clear():清空栈中的所有元素。
Count:获取栈中元素的数量。
Contains(T item):检查栈中是否包含某个元素。

创建和初始化 Stack

// 创建一个 Stack<T>,T 是泛型类型,比如 int、string 或自定义类
Stack<int> stack = new Stack<int>();

// 添加元素到栈中
stack.Push(10);
stack.Push(20);
stack.Push(30);

// 输出栈中的元素数量
Debug.LogError("栈中元素数量: " + stack.Count); // 输出: 3

Push 和 Pop 操作

Push:将元素添加到栈顶
Pop:移除并返回栈顶的元素(如果栈为空会抛出异常)

Stack<string> stack = new Stack<string>();

// 添加元素
stack.Push("Apple");
stack.Push("Banana");
stack.Push("Cherry");

// 移除并返回栈顶元素
string topItem = stack.Pop();
Debug.LogError("移除的元素: " + topItem); // 输出: Cherry

// 查看栈顶元素(不移除)
string peekItem = stack.Peek();
Debug.LogError("栈顶元素: " + peekItem); // 输出: Banana

Stack遍历

Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Push(3);

// 遍历栈
foreach (int item in stack)
{
    Debug.LogError(item); // 输出顺序: 3, 2, 1
}

清空栈

使用 Clear() 方法可以清空栈中的所有元素。

stack.Clear();
Debug.LogError("栈中元素数量: " + stack.Count); // 输出: 0

注意:这里如果你T是GameObject对象的话需要额外的操作

Stack<GameObject> noteStack = new Stack<GameObject>();
while (noteStack.Count > 0)
{
    GameObject note = noteStack.Pop();
    //是 GameObject
    Destroy(note);
}
stack.Clear();
Debug.LogError("栈中元素数量: " + stack.Count); // 输出: 0

检查栈是否包含某个元素

使用 Contains(T item) 方法可以检查栈中是否包含某个元素。

Stack<string> stack = new Stack<string>();
stack.Push("Apple");
stack.Push("Banana");

bool containsBanana = stack.Contains("Banana");
Debug.LogError("栈中是否包含 Banana: " + containsBanana); // 输出: True

栈的典型应用场景

撤销操作

Stack<string> actionStack = new Stack<string>();

// 用户执行操作
actionStack.Push("Typed 'Hello'");
actionStack.Push("Deleted 'Hello'");

// 撤销操作
string lastAction = actionStack.Pop();
Debug.LogError("撤销的操作: " + lastAction); // 输出: Deleted 'Hello'

深度优先搜索(DFS)

Stack<int> dfsStack = new Stack<int>();
dfsStack.Push(1); // 起始节点

while (dfsStack.Count > 0)
{
    int currentNode = dfsStack.Pop();
  	Debug.LogError("访问节点: " + currentNode);

    // 假设 currentNode 有子节点 2 和 3
    dfsStack.Push(3);
    dfsStack.Push(2);
}

注意事项

空栈异常:
如果栈为空时调用 Pop() 或 Peek(),会抛出 InvalidOperationException。因此,在使用这些方法前最好检查栈是否为空。

if (stack.Count > 0)
{
    int item = stack.Pop();
}

性能:
Stack 的 Push 和 Pop 操作的时间复杂度为 O(1),非常适合需要快速添加和移除元素的场景

总结

感谢大家的支持!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Python分割并高效处理PDF大文件

在处理大型PDF文件时&#xff0c;将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区&#xff0c;它可以提高处理效率&#xff0c;并使分析或操作文档变得更容易。在本文中&#xff0c;我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…

RabbitMQ知识点

1.为什么需要消息队列&#xff1f; RabbitMQ体系结构 操作001&#xff1a;RabbitMQ安装 二、安装 # 拉取镜像 docker pull rabbitmq:3.13-management ​ # -d 参数&#xff1a;后台运行 Docker 容器 # --name 参数&#xff1a;设置容器名称 # -p 参数&#xff1a;映射端口号&…

2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>int reverse( int number );int main…

力扣132. 分割回文串 II

力扣132. 分割回文串 II 题目 题目解析及思路 题目要求返回将s切割成若干回文串的最少切割次数 对于子串s[j...i]&#xff0c;若为回文串&#xff0c;则问题变为求s[0...j]的最少切割次数 因此可以考虑动态规划 对于问题s[j...i]是否为回文串&#xff0c;若s[i] s[j]则问…

调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)

文章目录 调研&#xff1a;如何实现智能分析助手&#xff08;Agent&#xff09;&#xff08;AutoCoder、FastGPT、AutoGen、DataCopilot&#xff09;一、交互流程二、数据流程三、架构分类四、开源产品4.1 AutoCoder&#xff08;知识库变体&#xff09;4.2 FastGPT&#xff08;…

学习使用ESP8266进行MQTT通信并在网页上可视化显示

目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…

mysql进阶(三)

MySQL架构和存储引擎 1. MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器 的连接器。整体架构图如下所⽰&#xff1a; 2. 连接层 …

【MYSQL数据库异常处理】执行SQL语句报超时异常

MYSQL执行SQL语句异常&#xff1a;The last packet successfully received from the server was 100,107 milliseconds ago. The last packet sent successfully to the server was 100,101 milliseconds ago. 这个错误表明 MySQL 服务器与 JDBC 连接之间的通信超时了。通常由…

深入理解三色标记、CMS、G1垃圾回收器

三色标记算法 简介 三色标记算法是一种常见的垃圾收集的标记算法&#xff0c;属于根可达算法的一个分支&#xff0c;垃圾收集器CMS&#xff0c;G1在标记垃圾过程中就使用该算法 三色标记法&#xff08;Tri-color Marking&#xff09;是垃圾回收中用于并发标记存活对象的核心算…

60页PDF | 四川电信数据湖及数据中台实施方案!(附下载)

一、前言 这份报告是关于四川电信数据湖与数据中台实施方案的详细规划。报告从数据驱动、事件管理、数据湖构建、数据资产管理和数据治理等多个方面展开&#xff0c;介绍了如何通过数据湖与数据中台的建设&#xff0c;实现数据的高效采集、存储、分析与共享&#xff0c;提升数…

短分享-Flink图构建

一、背景 通过简单的书写map、union、keyby等代码&#xff0c;Flink便能构建起一个庞大的分布式计算任务&#xff0c;Flink如何实现的这个酷炫功能呢&#xff1f;我们本次分享Flink做的第一步&#xff0c;将代码解析构建成图 源码基于Flink 2.10&#xff0c;书籍参考《Flink核…

java常见的几种并发安全问题及解决方案

项目场景&#xff1a; 并发的应用场景&#xff0c;在开发过程会经常遇到。 例如&#xff1a;服务应用启动后&#xff0c;需要简单统计接口的总访问量&#xff1b;实时更新订单状态&#xff0c;成交总额。 问题描述&#xff1a; 比如统计接口访问次数&#xff0c;如下的实现&a…

【mysql系】mysql启动异常Can‘t create test file localhost.lower-test

1.查看通过下面命令获取对应mysql配置文件 whereis my.cnf 2.查看日志文件 下面这里是对应的错误日志 2025-03-03T06:33:56.402057Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see …

如何使用 LLM 生成的术语自动在搜索应用程序上构建 autocomplete 功能

作者&#xff1a;来自 Elastic Michael Supangkat 了解如何在 Elastic Cloud 中&#xff0c;通过使用 LLM 生成的词汇&#xff0c;为搜索应用增强自动补全功能&#xff0c;实现更智能、更动态的搜索建议。 自动补全是搜索应用中的一项关键功能&#xff0c;它通过在用户输入时实…

vscode离线配置远程服务器

目录 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下载linux服务器安装包 2.3 安装包上传到远程服务器&#xff0c;并进行文件解压缩 三、常见错误 Failed to set up socket for dynamic port forward to remote port&#xff08;vscode报错解决方法&#xff09;-C…

MinIO 容器化快速部署指南

MinIO 容器化快速部署指南 一、快速开始 # 创建网络&#xff08;需提前执行&#xff09; docker network create srebro#创建工作目录 mkdir -p /home/application/Middleware/minio/# 启动服务 docker-compose up -d二、配置说明 docker-compose.yaml 结构 services:minio…

K8S学习之基础十四:k8s中Deployment控制器概述

Deployment控制器概述&#xff1a; Deployment控制器是k8s中最常用的资源对象&#xff0c;为Replicaset和Pod创建提供了一种声明式的定义方法&#xff0c;在Deployment对象中描述一个期望的状态&#xff0c;Deployment控制器就会按照一定的控制速率把实际状态改成期望状态&…

记录Linux安装mysql8

1.mysql8安装 ​​​​​​​yum安装mysql8.0版本_yum 安装mysql8-CSDN博客文章浏览阅读833次&#xff0c;点赞10次&#xff0c;收藏9次。yum安装mysql8.0版本,如果系统中已经安装了旧版本的 MySQL 或者 mariadb&#xff0c;需要先卸载._yum 安装mysql8https://blog.csdn.net/…

CodeBlocks个性化竞赛配置

文章目录 1. 主题设置2. 设置默认代码3. 比赛时的使用 1. 主题设置 参考博客 --> codeblocks更改主题颜色及调试 跟随当前教程配置主题 博主使用的主题为son of obsidian&#xff0c;此主题为黑色背景&#xff0c;按照上边参考博文修改一下光标颜色即可。 效果图&#xff1…

如何用单机版deepseek编写示例

以下是一个简单的 DeepSeek 编程示例&#xff0c;通过 API 调用实现智能对话功能&#xff1a;文末有链接 一、环境准备 pip install requests # 安装 HTTP 请求库‌:ml-citation{ref"2" data"citationList"} 二、代码实现 import requests def chat_wi…