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

flutter json解析增强

依赖:xxf_json

反序列化兼容特征一览表

类型\是否兼容

int

double

num

string

bool

int

yes

yes

yes

yes

yes

double

yes

yes

yes

yes

yes

num

yes

yes

yes

yes

yes

string

yes

yes

yes

yes

yes

bool

yes

yes

yes

yes

yes

专业词语

.g.dart : 是json_annotation生成的中间解析文件

DTO : 网络传输模型,这里泛指json解析模型

中间件

对json提供如下基础中间件,两种兼容模式,一种给全日志

  1. JsonConverter 兼容基本类型(int,num,double,string,bool),异常情况解析成对应类型的默认值,达到同级别js,oc等语言层兼容

  2. nullable_converter 兼容基本类型(int,num,double,string,bool),异常情况解析成null,需要DTO声明字段为可空类型

  3. strict_converter 先兼容解析,解析不了再报错,解决json解析报错,不提示具体内容,导致一个一个去比较DTO里声明的字段,或者打印stack才可以排查具体字段

至于要使用多少类型兼容和什么策略,请自己选,上图只是模版

用法

  1. DTO层增加注解 通过 @JsonSerializable 注解参数converters 注入!

其中 primitiveConvertors :基本类型解析器,安全处理,如遇到失败会转换成默认值 primitiveNullableConvertors:基本类型解析器,安全处理,如遇到失败变成null,适合声明可空类型的字段

primitiveStrictConvertors:基本类型解析器,不安全处理,用于提示内容,比原错误始信息增加 内容本身到日志里面,解决原始报错,不提示具体内容,不好分析DTO的那个字段

用法代码示例:

@JsonSerializable(converters: [...primitiveNullableConvertors, RRuleJsonAdapter()])
class Event{
}

  1. 字段级别增加注解

通过 @JsonKey fromJson 注解增加参数

用法代码示例:

@JsonSerializable()
class Event  {//类型不对,就解析成""双引号字符串@JsonKey(fromJson: StringDecoder.decodeOrEmpty)String? eventId; //设备内日程id
}

提供更自由的控制,每种类型都提供三种策略

bool_decoder.dart

double_decoder.dart

int_decoder.dart

num_decoder.dart

string_decoder.dart

class StringDecoder {///策略1 异常情况解析为空static String? decodeOrNull(dynamic json) {if (json == null) return null;return json.toString();}///策略2 异常情况解析默认值,比@JsonKey(defaultValue: "")更健壮static String decodeOrEmpty(dynamic value) {return decodeOrNull(value) ?? "";}///策略3 尝试解析异常情况报错并给出错误值static String decodeOrException(dynamic value) {return decodeOrNull(value) ??(throw BaseDecoder.createParseError("String", value));}
}

框架的中间件优先级是 @JsonKey(fromJson)>@JsonSerializable(converters)

推荐倾向

1. DTO里字段声明成可空字段

给DTO增加可空兼容转换器@JsonSerializable( converters: primitiveNullableConvertors),

具体字段的应用由业务层来处理兼容, 这样不至于整个页面出问题,个别字段的问题,交由service层/repo层来校验参数,

eg.如在版本迭代中 枚举的类型可能增加,但是之前版本代码是没有的,那么非空类型就出问题了

实在要坚持后端一定不会变,其他页面传进来的参数也不会变, 那么就选择primitiveStrictConvertors或者decodeOrException 会尝试解析之后再报错出来!

规范

结合convertor和 fromJson,toJson Api 注入到DTO身上,不应该去手写解析 手写/或者手改.g.dart 合并代码和以及兼容性都有些问题

枚举的兼容

枚举默认按名字,如按其他值解析,有如下三种方式 1. 在枚举值上添加@JsonValue(value)

  1. 自定义jsonDecoder 这样枚举在其他DTO声明的地方都可以快速适配,

  2. 在其他DTO 声明枚举的字段上增加注解 @JsonKey(fromJson: StatusConverter.fromJson, toJson: StatusConverter.toJson)

不要在其他DTO解析的地方(其他DTO有声明这个枚举类型字段) 来手写if判断!


/// 日历账号类型
enum CalDavTypeEnum {google("google"),iCloud("iCloud"),calDAV("CalDAV");final String value;const CalDavTypeEnum(this.value);
}/// 枚举值和 JSON 数据的映射关系
Map<String, CalDavTypeEnum> _stringToEnum =CalDavTypeEnum.values.associateBy((e) => e.value);
Map<CalDavTypeEnum, String> _enumToString =CalDavTypeEnum.values.associate((e) => MapEntry(e, e.value));class CalDavTypeEnumDecoder {static CalDavTypeEnum decode(dynamic json) {return _stringToEnum["$json"] ??(throw ArgumentError('Unknown enum value: $json'));}static CalDavTypeEnum? decodeOrNull(dynamic json) {return _stringToEnum["$json"];}
}class CalDavTypeEnumEncoder {static String encode(CalDavTypeEnum? myEnum) {return _enumToString[myEnum] ??(throw ArgumentError('Unknown enum: $myEnum'));}static String? encodeOrNull(CalDavTypeEnum? myEnum) {return _enumToString[myEnum];}
}///解析转换器
class CalDavTypeEnumJsonConverterextends JsonConverter<CalDavTypeEnum, dynamic> {const CalDavTypeEnumJsonConverter();@overrideCalDavTypeEnum fromJson(json) {return CalDavTypeEnumDecoder.decode(json);}@overridetoJson(CalDavTypeEnum object) {return CalDavTypeEnumEncoder.encode(object);}
}///解析转换器 可空
class CalDavTypeEnumNullableJsonConverterextends JsonConverter<CalDavTypeEnum?, dynamic> {const CalDavTypeEnumNullableJsonConverter();@overrideCalDavTypeEnum? fromJson(json) {return CalDavTypeEnumDecoder.decodeOrNull(json);}@overridetoJson(CalDavTypeEnum? object) {return CalDavTypeEnumEncoder.encodeOrNull(object);}
}

json_annotation使用指引
 

  1. 模型增加 @JsonSerializable注解

  2. 在模型声明文件头部增加 part 'xxx.g.dart'; 其中xxx 一般是模型名字,当然也可以是其他名字

  3. 字段如有必要增加@JsonKey

  4. 在命令行 cd 到模型对应的目录

  5. 在命令行执行 flutter pub run build_runner build

  6. 那么就能看到生成 xxx.g.dart文件的生成,将这个文件添加到git

  7. 然后再模型里面声明方法引用

part 'account_xxx.g.dart';@JsonSerializable()
class AccountInfo {int? id;//声明反序列化方法factory AccountInfo.fromJson(Map<String, dynamic> json) =>_$AccountInfoFromJson(json);///声明序列化方法Map<String, dynamic> toJson() => _$AccountInfoToJson(this);
}

相关文章:

flutter json解析增强

依赖:xxf_json 反序列化兼容特征一览表 类型\是否兼容 int double num string bool int yes yes yes yes yes double yes yes yes yes yes num yes yes yes yes yes string yes yes yes yes yes bool yes yes yes yes yes 专业词语 .g…...

职坐标解码互联网行业转型发展新动能

当前&#xff0c;互联网行业正以前所未有的速度重塑全球产业格局。工信部最新数据显示&#xff0c;我国互联网企业营收连续三年保持双位数增长&#xff0c;其中百强企业在人工智能、物联网等领域的投入强度同比提升40%&#xff0c;展现出强劲的技术引领力。与此同时&#xff0c…...

【软考-架构】13.4、质量属性-架构评估

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 质量属性软件架构评估✨质量属性质量属性场景敏感点&权衡点三种常用的评估方式基于场景的架构分析方式SAAM✨架构权衡分析法ATAM成本效益收益法CBAM 考试真题其他评估…...

Gitlab SSH Jenkins Pipeline Supervisor部署

Gitlab SSH Jenkins Pipeline方式部署 准备搞一搞简单部署SpringBoot项目的一种方式&#xff0c;通过Gitlabssh Jenkins Pipeline的方式&#xff0c;简单学习下。 环境准备 本地域名ip地址安装软件作用server01192.168.110.110Gitlab代码托管server02192.168.110.111Jenkins…...

Python Pandas实现导出两个Excel数据集的分组记录数分析

编写Python Pandas代码实现从一个Excel文件中的一个Sheet中的表格里取两个维度字段&#xff0c;根据这两个维度字段的数据分组统计&#xff0c;计算记录数的分组总计值&#xff0c;得到一个包含两个维度字段和记录数字段的分组总计值字段的dataframe&#xff0c;再从另一个Exce…...

维港首秀!沃飞长空AE200亮相香港特别行政区

4月13日-16日&#xff0c;第三届香港国际创科展在香港会议展览中心盛大举办。 作为国内领先、国际一流的eVTOL主机厂&#xff0c;沃飞长空携旗下AE200批产构型登陆国际舞台&#xff0c;以前瞻性的创新技术与商业化应用潜力&#xff0c;吸引了来自全球17个国家及地区的行业领袖…...

PyTorch 根据官网命令行无法安装 GPU 版本 解决办法

最近遇到一个问题&#xff0c;PyTorch 官网给出了 GPU 版本的安装命令&#xff0c;但安装成功后查看版本&#xff0c;仍然是 torch 2.6.0cpu 1. 清理现有 PyTorch 安装 经过探索发现&#xff0c;需要同时卸载 conda 和 pip 安装的 torch。 conda remove pytorch torchvision …...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB测试 #USB HOST #USB 鼠标

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——USB…...

Java基础-超全总结

1.Java中的基本数据类型 Java中有四类八种基本的数据类型&#xff0c;四类数据类型包括整型、浮点型、字符型、布尔型。 整型包括&#xff1a;byte、short、int和long浮点型包括&#xff1a;float和double字符型是char布尔型是boolean。 2.Java中的包装类型和基本类型的区别…...

区块链技术在数据隐私保护中的应用:从去中心化到零知识证明

区块链技术在数据隐私保护中的应用&#xff1a;从去中心化到零知识证明 在数字化时代&#xff0c;数据隐私已成为全球关注的焦点。无论是个人身份信息、医疗数据还是企业的敏感业务数据&#xff0c;都面临着泄露、篡改和滥用的风险。传统的安全方案依赖中心化服务器进行加密和…...

【大模型实战篇】--阿里云百炼搭建MCP Agent

MCP协议&#xff08;Model Communication Protocol&#xff0c;模型通信协议&#xff09;是大语言模型&#xff08;LLM&#xff09;与外部系统或其他模型交互时的一种标准化通信框架&#xff0c;旨在提升交互效率、安全性和可扩展性。 目录 1.阿里云百炼--MCP 1.1.MCP 服务接…...

Android ExifInterface rotationDegrees图旋转角度,Kotlin

Android ExifInterface rotationDegrees图旋转角度&#xff0c;Kotlin import android.media.ThumbnailUtils import android.os.Bundle import android.util.Log import android.util.Size import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity …...

linux 内核 ida机制分析

在描述ida之前,需要读者对linux 内核的radix-tree有一定的了解。关于radix-tree(基数树)的描述,作者在之前有专门的文章对其进行描述,这里不再赘述。 IDA是什么?内核文档中解释如下: /*** IDA description** The IDA is an ID allocator which does not provide the ab…...

linux-定时任务清理buffer、cache

在清理 buffer 和 cache 之前&#xff0c;调用 sync 命令是一个好习惯。sync 会将文件系统缓冲区中的数据强制写入磁盘&#xff0c;确保数据的一致性&#xff0c;避免数据丢失的风险。以下是改进后的脚本&#xff0c;增加了多个 sync 语句&#xff1a; 1、脚本内容&#xff1a;…...

Linux常用命令整理

Linux 系统提供了大量常用命令行工具,涵盖文件操作、权限管理、网络诊断、软件安装、系统监控、脚本编程等各个方面。下面按照不同功能类别,整理常用的 Linux 命令及其中文说明和使用示例。 文件与目录操作 ● ls:列出目录内容,用于显示指定目录下的文件和子目录。常用参数…...

Python爬虫第14节-如何爬取Ajax的数据

目录 前言 一、什么是Ajax 1.1 具体举例 1.2 基本原理 二、Ajax的分析 2.1 查看请求 2.2 过滤请求 三、解析提取Ajax 结果 3.1 分析请求 3.2 分析响应 四、Ajax抓取实战 前言 咱们在使用requests抓取网页的时候&#xff0c;常常会发现&#xff0c;得到的结果和在浏览…...

mac上面使用zip命令压缩一劳永逸

问题 需要将当前目录的文件和目录&#xff08;包含隐藏目录&#xff09;都要压缩近一个zip包&#xff0c;但同时部分目录我不想压缩进去例如&#xff1a;.idea这个种idea的配置目录就不想压缩进zip包。 命令 zip -r flask-dev.zip . -x "*.idea*"-r:递归目录.:当前…...

​​错误地使用了 app.use() 来注册全局组件

我是import globalComponent from "/components"; /* eslint-disable */ // ts-nocheck // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 export {}; /* prettier-ignore */ declare module vue { export interface…...

Python Django基于协同过滤算法的招聘信息推荐系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

鹰角:EMR Serverless Spark 在《明日方舟》游戏业务的应用

作者&#xff1a;鹰角网络高级大数据研发 茅旭辉 背景介绍 鹰角网络是一家年轻且富有创新的游戏公司&#xff0c;致力于开发充满挑战性和艺术价值的游戏产品。公司目前涵盖了游戏开发、运营和发行的全生命周期业务。随着业务的扩展&#xff0c;鹰角网络从单一爆款游戏发展到多…...

C语言学习之两个数值交换的算法

前言&#xff1a;本篇文章仅仅是作为作者复习使用 在C语言中&#xff0c;交换两个两个变量的数值是很常见的应用。在学习到指针的时候&#xff0c;我们已经掌握了几种交换的算法了。今天我来做一个小汇总 1创建第三个变量 缺点&#xff1a;需要创造第三个变量 2加减交换 缺点…...

CExercise_13_1排序算法_2归并排序

题目&#xff1a;CExercise_ 请手动实现归并排序算法&#xff1a; void merge_sort(int arr[], int len) 如果学有余力&#xff0c;不妨尝试一下多种临时数组的方式&#xff1a; 1.局部变量数组 2.全局变量数组 3.堆数组 关键点 分析&#xff1a; &#xff1a; 代码 代码块解决…...

富斯i6遥控器,无法切换通道解决办法

开机后长按【OK】键&#xff0c;进入设置 按【DOWN】选择【setup】 点击【ok】进入设置 再点击【OK】进入Reverse 将2设置为下&#xff0c;长按【cancel】保存&#xff0c;返回到设置 进入【Aux.channels】 将第二行【Source】设置为【Source SwC】,长按【CANCEL】保存并返回。…...

Maven 编译指定模版

背景 基于SpringCloud 做的微服务项目&#xff0c;很多都是依赖公共模块下的包&#xff0c;并且多模板都是在一个项目下的。 问题 每次打包都很编译整个项目下的所有模块。这样太耗时间了&#xff0c;把流水线的时间拖的太长了。 解决方案 在maven打包时&#xff0c;我们选…...

solr安装及ik中文分词器配置

提示&#xff1a;solr9.x版本需要jdk17&#xff0c;solr8.x版本需要jdk8 1、Solr 简介 Solr 是Apache 下的一个顶级开源项目&#xff0c;采用 Java 开发&#xff0c;它是基于 Lucene 的全文搜索服务器。Solr 提供了比 Lucene 更为丰富的查询语句&#xff0c;同时实现了可配置、…...

详解LeetCode中用字符串实现整数相加,字符串转整数及其溢出处理详解

目录 题目背景 代码整体逻辑 变量初始化 逐位相加过程 处理最后进位 结果反转 示例演示 总结 在LeetCode中&#xff0c;有一道经典的算法题是实现两个字符串形式的非负整数相加&#xff0c;今天我们就来深入分析一段用C实现该功能的代码&#xff0c;探究其背后的逻辑与…...

vue学习笔记06

学习的课程地址&#xff1a;老杜Vue视频教程&#xff0c;Vue2&#xff0c;Vue3实战精讲&#xff0c;一套通关vue_哔哩哔哩_bilibili 1、vue程序初体验 2、vue核心技术(基础) 3、Vue组件化 前面参见&#xff1a; vue学习笔记01 vue学习笔记02 vue学习笔记03 vue学习笔记…...

如何查看自己抖音的IP属地?详细教程及如何修改

在当今互联网时代&#xff0c;IP属地信息已成为各大社交平台&#xff08;如抖音、微博、快手等&#xff09;展示用户真实网络位置的重要功能。以下是关于如何查看抖音IP属地的详细教程及常见问题解答&#xff0c;帮助您快速了解相关信息&#xff1a; 一、如何查看抖音账号的IP属…...

熟悉Linux下的编程

可能 目录 熟悉Linux下Python编程的含义及与非Linux环境编程的区别 一、核心含义解析 二、与非Linux环境的关键区别 三、典型应用场景对比 四、能力培养建议 openfoem的下载之路&#xff1a; 方法一&#xff1a;使用cd命令 方法二&#xff1a;使用快捷方式 方法三&am…...

Uniapp:获取当前定位坐标

目录 一、出现场景二、具体使用 一、出现场景 在项目的开发中&#xff0c;会出现打卡、定位当前位置的功能&#xff0c;那我们如何获取当前位置呢&#xff1f;这就需要使用getLocation来获取当前位置坐标 二、具体使用 uni.getLocation({type: wgs84, // 返回可以用于uni.op…...

GitHub实用手册

文章目录 一、GitHub 的定义二、GitHub 的主要功能三、GitHub 的优势四、GitHub 的使用相关工具GitSourcetreeGithub-Desktop 一、GitHub 的定义 GitHub 是一个基于 Git 的分布式版本控制系统&#xff0c;它允许开发者在本地和远程仓库中管理代码版本&#xff0c;支持多人协作…...

【从零实现高并发内存池】Central Cache从理解设计到全面实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

Dijkstra算法求解最短路径—— 从零开始的图论讲解(2)

前言 在本系列第一期:从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序-CSDN博客 笔者给大家介绍了 图的概念,如何存图,如何简单遍历图,已经什么是图的拓扑排序 按照之前的学习规划&#xff0c;今天笔者将继续带大家深入了解图论中的一个核心问题&#x…...

Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7)

Spring AI 发布了它的 1.0.0 版本的第七个里程碑&#xff08;M7&#xff09;&#xff0c;下个月就是 RC1&#xff0c;紧接着就是 GA&#xff01;&#xff0c;对于我们 Java 开发者来说&#xff0c;这绝对是个值得关注的好消息&#xff01; 但是对于 Java 学习者来说&#xff0c…...

如何从 GitHub 镜像仓库到极狐GitLab?

最近 GitHub 封禁中国用户的事情闹得沸沸扬扬&#xff0c;虽然官方发布的报道说中国用户被限制登录是因为配置错误导致&#xff0c;已经撤回了更新&#xff0c;中国用户已经可以正常使用。但是这就像横在国内开发者和企业头上的“达摩克利斯之剑”。为了避免 GitHub 不可用而带…...

大象机器人推出myCobot 280 RDK X5,携手地瓜机器人共建智能教育机

摘要 大象机器人全新推出轻量级高性能教育机械臂 myCobot 280 RDK X5&#xff0c;该产品集成地瓜机器人 RDK X5 开发者套件&#xff0c;深度整合双方在硬件研发与智能计算领域的技术优势&#xff0c;实现芯片架构、软件算法、硬件结构的全栈自主研发。作为国内教育机器人生态合…...

在Android Studio中,`Settings`里的Gradle路径、环境变量以及`gradle - wrapper.properties`文件关联

在Android Studio中,Settings里的Gradle路径、环境变量以及gradle - wrapper.properties文件关联 Android Studio中Settings里的Gradle路径 在Android Studio的Settings(Preferences ) -> Build, Execution, Deployment -> Build Tools -> Gradle 中: Use defau…...

用react 写一个可左右滑动的柱状图

效果图 目录 效果图 ✅ 项目结构 &#x1f680; 创建项目步骤 1️⃣ 打开终端或命令行&#xff0c;创建新项目&#xff1a; 2️⃣ 安装 recharts 图表库&#xff1a; 3️⃣ 替换默认代码&#xff1a; 4️⃣ 启动项目&#xff1a; ✅ 项目结构 scrollable-bar-chart/ ├…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——MIPI LCD测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;www.alientek.com 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——MIPI LCD测试4.3 MIPI LCD测试4.3.1 使…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——RS485串口测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;www.alientek.com 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——RS485串口测试 第四章 ATK-DLMP257B功能…...

Sui 的工具生态简化了游戏开发者的 Web3 集成流程

希望利用 Web3 独特协同效应的游戏开发者&#xff0c;常常在强大的区块链功能与流畅的游戏体验之间难以权衡。许多区块链方案要求大幅重构游戏基础架构&#xff0c;增加了开发难度&#xff0c;甚至需要学习全新的智能合约语言。而 Sui 通过直观的工具消除这一阻力&#xff0c;使…...

Vue 3 的组合式 API-hooks

Vue 3 的组合式 API 组合式 API 是 Vue 3 的核心特性之一&#xff0c;它允许开发者将组件的逻辑拆分为可复用的函数。组合式 API 的主要特点是 逻辑复用&#xff1a;将逻辑提取到独立的函数中&#xff0c;方便在多个组件中复用。组织清晰&#xff1a;将相关的逻辑分组&#x…...

AOSP Android14 Launcher3——底部任务栏Taskbar详解

前言&#xff1a;Launcher3中底部Taskbar和Navbar&#xff0c;或者说中文里面的术语导航栏&#xff0c;这几个词是很容易让人混淆的地方。本文要介绍的是Taskbar。从字面上意思来看&#xff0c;Taskbar就是任务栏&#xff0c;任务栏是Launcher3中一个重要的组件&#xff0c;尤其…...

QGraphicsView、QGraphicsScene和QGraphicsItem图形视图框架(五)QGraphicsView的缩放和移动

QGraphicsView自带滚动条的显示&#xff0c;但是大部分的需求样式都不需要滚动条&#xff0c;并且要通过鼠标来控制视图的缩放和移动。需要重写QGraphicsView实现。 一、相关函数 1.scale void QGraphicsView::scale(qreal sx, qreal sy) 按&#xff08;sx&#xff0c;sy&…...

算法——果蝇算法

果蝇算法&#xff08;Fruit Fly Optimization Algorithm&#xff0c;FOA&#xff09;是一种受果蝇觅食行为启发而开发的群智能优化算法。以下从算法原理、算法流程、算法特点等方面为你详细讲述&#xff1a; 算法原理 果蝇本身具有优于其他物种的嗅觉和视觉。在觅食过程中&am…...

重返JAVA之路——图书管理系统

目录 一、功能介绍 二、设计模块 三、系统构建 1.book模块 2.operation模块 输入循环和验证 查找图书并处理借阅状态 未找到图书的处理 查找删除图书功能实现 未找到图书的处理 图书查找与归还 work方法实现图书信息输出 3. user模块实现 四、主菜单 一、功能介绍 …...

【16】数据结构之基于树的排序算法篇章

目录标题 选择排序简单选择排序树形选择排序 堆排序堆的定义Heap小跟堆大根堆堆的存储堆的代码设计堆排序的代码设计 排序算法综合比较 选择排序 基本思想&#xff1a;从待排序的序列中选出最大值或最小值&#xff0c;交换该元素与待排序序列的头部元素&#xff0c;对剩下的元…...

Uniapp:确认框

目录 一、 出现场景二、 效果展示三、具体使用 一、 出现场景 在项目的开发中&#xff0c;会经常出现删除数据的情况&#xff0c;如果直接删除的话&#xff0c;可能会存在误删&#xff0c;用户体验不好&#xff0c;所以需要增加一个消息提示&#xff0c;提醒用户是否删除。 二…...

pyswmm实现洪涝模拟

准备好.inp文件作为SWMM模型输入&#xff0c;调用pyswmm模块执行模拟&#xff0c;返回节点溢流量&#xff08;flooding&#xff09;作为积水量的初步表征。 代码&#xff1a; from pyswmm import Simulation, Nodes import pandas as pddef run_swmm_simulation(inp_file, ou…...

My Diary Pro:记录生活,珍藏回忆

我的日记My Diary Pro是一个非常好用的手机日记软件&#xff0c;可以使用它来记录每日生活日常&#xff0c;不少的用户可能都知道在生活之中可能会发生一些比较的重要的事情&#xff0c;实际上我们都可以将这些内容记录下来。包括个人观点&#xff0c;旅行游记&#xff0c;心情…...