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

第6篇:数组和列表——存储多个数据 原生中文编程

第6篇数组和列表——存储多个数据**作者**中文编程倡导者—— 李金雨联系方式wbtm2718qq.com**目标读者**编程入门零基础核心理念使用华为仓颉原生中文编程体验真正的国产编程语言一、开篇引入1.1 生活中的列表生活中到处都有列表 班级花名册50个同学的名字 购物清单要买的东西 通讯录几百个好友 新闻列表几十条新闻1.2 程序中的列表如果让你一个个写出来那太麻烦了笨方法不要这样做let 学生1 张三 let 学生2 李四 let 学生3 王五 // ... 重复50次聪明方法let 学生列表 [张三, 李四, 王五, ...] // 一行代码搞定1.3 关于数组语法的思考在学习数组之前我们再聊聊仓颉的语法设计。仓颉的数组定义是let 学生列表: ArrayString [张三, 李四, 王五]这里又出现了类型后置的问题ArrayString表示字符串数组但它放在了变量名后面。如果仓颉能像C#那样// C#风格string[]学生列表{张三,李四,王五};或者// 设想中的中文风格 字符串数组 学生列表 [张三, 李四, 王五]这样读起来就像是字符串数组学生列表而不是学生列表字符串数组更符合中国人的定语前置习惯不过仓颉的数组操作语法还是比较简洁的我们接着学习吧1.4 本课目标今天我们要学习数组的创建和使用数组的遍历数组的增删改查动态列表ArrayList做一个班级管理系统二、概念讲解2.1 数组基础什么是数组数组就是相同类型数据的集合就像一排储物柜每个格子存一个数据。创建数组// 方式1直接赋值 let 成绩列表: ArrayInt64 [85, 92, 78, 96, 88] // 方式2空数组 let 空数组: ArrayString [] // 方式3指定大小初始值为默认值 let 固定数组 ArrayInt64(10, { 0 })再次吐槽类型后置ArrayInt64这种写法意思是整数数组但它放在了变量名后面。我们中国人习惯说整数数组成绩列表而不是成绩列表整数数组。这就像我们习惯说“红色的苹果”仓颉的写法像是“苹果红色的”希望华为能在未来版本中改进访问数组元素let 成绩列表 [85, 92, 78, 96, 88] // 获取第1个元素索引从0开始 let 第一个成绩 成绩列表[0] // 85 // 获取第2个元素 let 第二个成绩 成绩列表[1] // 92 // 获取最后一个元素 let 最后一个成绩 成绩列表[成绩列表.size - 1] // 88注意索引从0开始不是从1开始2.2 数组的遍历方式1使用for循环let 学生列表 [张三, 李四, 王五, 赵六] // 遍历数组 for (i in 0..学生列表.size) { println(第${i 1}个学生${学生列表[i]}) }方式2使用for-in如果仓颉支持for (学生 in 学生列表) { println(学生${学生}) }2.3 数组的操作获取数组长度let 长度 成绩列表.size修改元素成绩列表[0] 90 // 把第1个成绩改为90添加元素动态数组import std.collection.* main() { let 动态列表 ArrayListString() // 添加元素 动态列表.append(张三) 动态列表.append(李四) 动态列表.append(王五) println(列表内容${动态列表}) println(列表大小${动态列表.size}) }删除元素动态列表.removeAt(0) // 删除第1个元素2.4 常用数组操作求和、平均值、最大最小值main() { let 成绩列表 [85, 92, 78, 96, 88] // 求和 var 总分: Int64 0 for (成绩 in 成绩列表) { 总分 总分 成绩 } // 平均值 let 平均分 Float64(总分) / Float64(成绩列表.size) // 最大值和最小值 var 最高分 成绩列表[0] var 最低分 成绩列表[0] for (成绩 in 成绩列表) { if (成绩 最高分) { 最高分 成绩 } if (成绩 最低分) { 最低分 成绩 } } println(总分${总分}) println(平均分${平均分}) println(最高分${最高分}) println(最低分${最低分}) }三、动手实践3.1 基础练习班级成绩统计// 班级成绩统计 main() { println( 班级成绩统计 ) println() // 学生成绩列表 let 学生成绩 [ (张三, 85), (李四, 92), (王五, 78), (赵六, 96), (孙七, 88) ] println(学生成绩列表) for ((姓名, 成绩) in 学生成绩) { println(${姓名}${成绩}分) } println() // 计算统计信息 var 总分: Int64 0 var 最高分: Int64 0 var 最低分: Int64 100 var 优秀人数: Int64 0 var 及格人数: Int64 0 for ((姓名, 成绩) in 学生成绩) { 总分 总分 成绩 if (成绩 最高分) { 最高分 成绩 } if (成绩 最低分) { 最低分 成绩 } if (成绩 90) { 优秀人数 优秀人数 1 } if (成绩 60) { 及格人数 及格人数 1 } } let 平均分 Float64(总分) / Float64(学生成绩.size) let 及格率 Float64(及格人数) / Float64(学生成绩.size) * 100.0 println(【统计结果】) println(总人数${学生成绩.size}人) println(总分${总分}分) println(平均分${平均分}分) println(最高分${最高分}分) println(最低分${最低分}分) println(优秀人数${优秀人数}人) println(及格人数${及格人数}人) println(及格率${及格率}%) }3.2 进阶练习学生信息管理系统// 学生信息管理系统 import std.collection.* class 学生 { var 姓名: String var 年龄: Int64 var 班级: String var 成绩: Int64 init(姓名: String, 年龄: Int64, 班级: String, 成绩: Int64) { this.姓名 姓名 this.年龄 年龄 this.班级 班级 this.成绩 成绩 } func 显示信息() { println(姓名${姓名}年龄${年龄}班级${班级}成绩${成绩}) } } main() { println( 学生信息管理系统 ) println() // 创建学生列表 let 学生列表 ArrayList学生() // 添加学生 学生列表.append(学生(张三, 15, 初三(1), 85)) 学生列表.append(学生(李四, 16, 初三(1), 92)) 学生列表.append(学生(王五, 15, 初三(1), 78)) 学生列表.append(学生(赵六, 16, 初三(1), 96)) // 显示所有学生 println(【所有学生信息】) for (学生 in 学生列表) { 学生.显示信息() } println() // 查找优秀学生成绩90 println(【优秀学生】) for (学生 in 学生列表) { if (学生.成绩 90) { 学生.显示信息() } } println() // 计算平均年龄 var 年龄总和: Int64 0 for (学生 in 学生列表) { 年龄总和 年龄总和 学生.年龄 } let 平均年龄 Float64(年龄总和) / Float64(学生列表.size) println(平均年龄${平均年龄}岁) }3.3 挑战练习通讯录管理// 通讯录管理 import std.collection.* class 联系人 { var 姓名: String var 电话: String var 邮箱: String init(姓名: String, 电话: String, 邮箱: String) { this.姓名 姓名 this.电话 电话 this.邮箱 邮箱 } } main() { println( 通讯录 ) println() let 通讯录 ArrayList联系人() // 添加联系人 通讯录.append(联系人(张三, 13800138000, zhangsanqq.com)) 通讯录.append(联系人(李四, 13900139000, lisiqq.com)) 通讯录.append(联系人(王五, 13700137000, wangwuqq.com)) // 显示所有联系人 println(【所有联系人】) for ((索引, 联系人) in 通讯录) { println(${索引 1}. ${联系人.姓名} - ${联系人.电话}) } println() println(共${通讯录.size}位联系人) }四、知识总结4.1 核心概念回顾数组相同类型数据的集合索引从0开始访问数组元素遍历逐个访问数组元素动态列表可以增删元素的列表4.2 关于语法设计的总结仓颉的数组类型声明ArrayInt64又出现了类型后置的问题let 成绩列表: ArrayInt64 [85, 92, 78]如果仓颉能改进// 设想中的改进 Int64[] 成绩列表 [85, 92, 78] // 像Java/C# // 或者 整数数组 成绩列表 [85, 92, 78] // 纯中文希望华为能在未来版本中考虑这种更符合中国人习惯的语法4.3 关键代码速查// 创建数组 let 数组 [1, 2, 3, 4, 5] // 访问元素 let 元素 数组[0] // 获取长度 let 长度 数组.size // 遍历数组 for (元素 in 数组) { // 处理元素 } // 动态列表 import std.collection.* let 列表 ArrayListString() 列表.append(元素) 列表.removeAt(0)4.4 常见错误提醒错误现象原因解决方法索引越界访问了不存在的索引检查索引范围类型不匹配数组类型和元素类型不一致确保类型一致空数组访问数组为空先检查数组长度五、课后作业5.1 巩固练习必做练习1数组排序对一个整数数组进行排序冒泡排序或选择排序。练习2查找元素在一个数组中查找指定元素返回其索引。练习3数组合并合并两个数组并去重。5.2 创意编程选做创意1待办事项列表实现增删改查功能。创意2简易数据库用数组实现简单的数据存储和查询。创意3抽奖程序从名单中随机抽取获奖者。5.3 下篇预习下一篇我们将学习功能封装——方法学习如何封装可复用的代码。恭喜你完成了第6篇的学习现在你已经掌握了数组和列表可以存储和操作多个数据了下节课我们将学习方法封装可复用的代码

相关文章:

第6篇:数组和列表——存储多个数据 原生中文编程

第6篇:数组和列表——存储多个数据**作者:**中文编程倡导者—— 李金雨 联系方式: wbtm2718qq.com **目标读者:**编程入门(零基础) 核心理念: 使用华为仓颉原生中文编程,体验真正的国…...

基于VuePress构建私有化团队Wiki:静态站点生成器的实践指南

1. 项目概述:一个为团队知识沉淀而生的私有化Wiki最近在折腾团队内部的知识管理,发现市面上的在线文档工具虽然方便,但总有些地方不尽如人意。要么是数据安全心里没底,担心核心业务讨论和代码片段外泄;要么是功能太臃肿…...

快速构建quartus ii安装引导器:快马原型设计助力环境搭建效率翻倍

作为一名FPGA开发者,我深知Quartus II的安装过程有多让人头疼。不同版本的系统要求、繁琐的配置步骤、漫长的等待时间,稍有不慎就可能因为环境不兼容导致安装失败。最近尝试用InsCode(快马)平台快速搭建了一个安装引导原型,效果出乎意料的好&…...

全网资源一网打尽:res-downloader 跨平台下载工具深度解析

全网资源一网打尽:res-downloader 跨平台下载工具深度解析 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 想要轻…...

为AE视频项目配置Claude Code使用Taotoken的API服务

为AE视频项目配置Claude Code使用Taotoken的API服务 1. 准备工作 在开始配置前,请确保已安装Claude Code工具并拥有Taotoken平台的API Key。登录Taotoken控制台,在「API密钥」页面创建新密钥并复制保存。建议为视频项目单独创建密钥以便后续用量追踪。…...

从Docker容器到K8s Pod:深入解读ERR,INSUFFICIENT_RESOURCES背后的Cgroups限制与调优

从Docker容器到K8s Pod:深入解读ERR,INSUFFICIENT_RESOURCES背后的Cgroups限制与调优 凌晨三点,当告警短信第15次响起时,运维团队终于意识到这不是简单的资源扩容问题。监控大屏上显示宿主机的内存利用率仅65%,但容器日志里不断刷…...

TranslucentTB终极指南:5分钟轻松实现Windows任务栏透明美化

TranslucentTB终极指南:5分钟轻松实现Windows任务栏透明美化 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想让你的Windows…...

如何用Retrieval-based-Voice-Conversion-WebUI实现高质量AI语音转换:10分钟数据训练终极指南

如何用Retrieval-based-Voice-Conversion-WebUI实现高质量AI语音转换&#xff1a;10分钟数据训练终极指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Tren…...

从SHA-256到SM3:手把手教你用Verilog移植一个国密哈希算法IP核

从SHA-256到SM3&#xff1a;手把手教你用Verilog移植一个国密哈希算法IP核 在硬件安全领域&#xff0c;哈希算法作为密码学基础组件&#xff0c;其高效实现直接影响着系统整体性能。对于已经掌握SHA-256等国际标准算法硬件实现的开发者而言&#xff0c;转向国密SM3算法时往往面…...

别再乱配了!Nacos 2.2.3+ 鉴权开启后,Spring Boot项目连不上的几个常见坑点

Nacos 2.2.3鉴权实战&#xff1a;Spring Boot连接失败的深度排查指南 当Nacos升级到2.2.3版本后&#xff0c;鉴权机制的变化让不少开发者踩了坑。特别是那些从老版本迁移过来的Spring Boot项目&#xff0c;明明配置看起来没问题&#xff0c;却总是连不上配置中心。本文将带你直…...

GESP5级C++考试语法知识(十四、贪心算法(二)区间问题(提高级))

&#x1f31f;《贪心王国打点小精灵大作战》&#x1f3f0; 一、故事开场在贪心王国里&#xff0c;有一片神秘的区域森林 &#x1f332;森林里有很多“魔法区间”&#xff0c;比如&#xff1a;&#x1f449; [1,5] &#x1f449; [2,6] &#x1f449; [4,7]&#x1f608; 危机来…...

别再只用相关系数了!用Matlab的wcoherence函数,5分钟画出时间序列的交叉小波相干图

别再只用相关系数了&#xff01;用Matlab的wcoherence函数&#xff0c;5分钟画出时间序列的交叉小波相干图 当我们面对两组时间序列数据时&#xff0c;传统的相关系数只能给出一个笼统的关联度指标&#xff0c;而无法揭示不同时间尺度下的动态关联模式。比如分析股票价格与成交…...

基于Coze平台的课堂语音互动机器人设计与实现

基于Coze平台的课堂语音互动机器人设计与实现 摘要 随着人工智能技术的快速发展,大语言模型驱动的智能体(Agent)在教育领域的应用日益广泛。本文基于字节跳动推出的Coze(扣子)AI开发平台,设计并实现了一款面向课堂教学场景的语音互动机器人。该机器人模拟多个具有鲜明性…...

从个人到团队:基于快马平台实战开发一个可协作的WorkBuddy任务管理工具

从个人到团队&#xff1a;基于快马平台实战开发一个可协作的WorkBuddy任务管理工具 最近团队内部一直在寻找一个轻量级的任务协作工具&#xff0c;市面上现有的方案要么功能过于复杂&#xff0c;要么定制化程度不够。于是决定自己动手&#xff0c;用InsCode(快马)平台快速搭建…...

如何一键获取Steam游戏清单:Onekey工具的终极指南

如何一键获取Steam游戏清单&#xff1a;Onekey工具的终极指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam游戏清单下载而烦恼吗&#xff1f;Onekey Steam Depot清单下载工…...

当Matplotlib遇到Seaborn:网格线风格如何统一?一个案例搞定多图排版

当Matplotlib遇到Seaborn&#xff1a;网格线风格统一与多图排版实战指南 在数据可视化领域&#xff0c;Matplotlib和Seaborn是Python生态中最常用的两个库。Matplotlib提供了基础的绘图功能&#xff0c;而Seaborn则在Matplotlib基础上封装了更高级的统计图表和美观的默认样式。…...

数字英语验证码识别API集成指南

本文将为您介绍数字英语验证码识别API的集成指南。该API基于深度学习技术&#xff0c;能够识别可变长度的英语数字验证码。您只需输入验证码图片的内容&#xff0c;即可获取验证码的识别结果。 环境准备 在使用API之前&#xff0c;您需要在 数字英语验证码识别API 页面申请相…...

Suno Tasks API 的集成与使用指南

简介 Suno Tasks API 是 Ace Data Cloud 提供的一项强大服务&#xff0c;主要用于查询通过 Suno Audios Generation API 或 Suno Lyrics Generation API 生成的任务的执行状态。本文将详细介绍如何集成和使用 Suno Tasks API&#xff0c;帮助开发者轻松查询任务状态&#xff0…...

【Java服务网格实战权威指南】:20年架构师亲授Istio+Spring Cloud双模落地的5大避坑法则

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Java服务网格的核心演进与双模架构认知 Java 生态长期以 Spring Cloud 和 Dubbo 为代表构建微服务治理能力&#xff0c;但随着云原生基础设施成熟&#xff0c;服务网格&#xff08;Service Mesh&#x…...

新手入门Graphify:基于快马平台实现首个社交网络关系图

今天想和大家分享一个特别适合新手入门的Graphify项目——用D3.js实现社交网络关系图。作为刚接触图论可视化的小白&#xff0c;我最初看到那些复杂的连线图总觉得无从下手&#xff0c;直到在InsCode(快马)平台尝试了这个项目&#xff0c;才发现原来入门可以这么简单。 搭建基础…...

GARbro视觉小说资源浏览器:5步掌握游戏资源提取终极指南

GARbro视觉小说资源浏览器&#xff1a;5步掌握游戏资源提取终极指南 【免费下载链接】GARbro Visual Novels resource browser 项目地址: https://gitcode.com/gh_mirrors/ga/GARbro GARbro是一款专为视觉小说爱好者设计的游戏资源浏览器&#xff0c;能够帮助你轻松访问…...

调试实录:一次SATA硬盘读写异常,我是如何通过分析FIS命令流定位到内核驱动内存分配Bug的

从FIS命令流异常到内核内存分配&#xff1a;一次SATA硬盘故障的深度追踪 那是一个再普通不过的周四下午&#xff0c;直到监控系统突然发出刺耳的警报——生产环境中的多台服务器相继报告SATA存储设备出现间歇性读写失败。作为团队中负责存储子系统稳定的工程师&#xff0c;我迅…...

别再死记UNet结构了!用PyTorch手搓一个医学细胞分割模型(附ISBI数据集实战代码)

别再死记UNet结构了&#xff01;用PyTorch手搓一个医学细胞分割模型&#xff08;附ISBI数据集实战代码&#xff09; 医学图像分割一直是计算机视觉领域的重要研究方向&#xff0c;尤其在细胞分析、病理诊断等场景中&#xff0c;精确的分割结果能为后续研究提供可靠基础。传统方…...

保姆级教程:用`ipvsadm`和`iptables-save`命令,一步步拆解K8s Service的流量转发路径

深入拆解Kubernetes Service流量转发&#xff1a;从命令行视角看ipvs与iptables的协同 当你第一次在Kubernetes集群中创建一个Service时&#xff0c;有没有好奇过这个虚拟IP背后究竟发生了什么&#xff1f;为什么一个ClusterIP能够稳定地将流量路由到可能随时变化的Pod上&#…...

2025最权威的五大AI科研助手横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 一键论文生成器是智能写作辅助系统&#xff0c;运用自然语言处理和深度学习技术&#xff0c;…...

3步掌握Krita AI绘画:面向初学者的完整指南

3步掌握Krita AI绘画&#xff1a;面向初学者的完整指南 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项目地址: https://gitcode.com/gh_mi…...

LinkSwift:八大网盘直链解析工具终极指南,一键解锁高速下载新体验

LinkSwift&#xff1a;八大网盘直链解析工具终极指南&#xff0c;一键解锁高速下载新体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘…...

3步实战精通Photoshop AVIF插件:让你的图像体积减少60%的终极指南

3步实战精通Photoshop AVIF插件&#xff1a;让你的图像体积减少60%的终极指南 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format 你是否曾经因为网站图片加载太慢而…...

DeepGEMM 核心技术解析:批次不变性、确定性与 FP8 优化的统一

核心主张: DeepGEMM 的价值不是更高的 FLOPS,而是将效率、确定性、批次不变性三者统一——这才是大规模分布式训练真正需要的。 适读人群: 大模型架构师、Infra 工程师、关注 AI 底层优化的技术决策者 阅读时长: 约 18 分钟 核心收益: 理解 GEMM 优化的工程维度,掌握批次…...

WinBtrfs v1.9深度解析:如何在Windows上构建企业级Btrfs存储解决方案

WinBtrfs v1.9深度解析&#xff1a;如何在Windows上构建企业级Btrfs存储解决方案 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs WinBtrfs v1.9作为Windows平台最成熟的开源Btrfs驱动程…...