Kotlin 极简小抄 P9 - 数组(数组的创建、数组元素的访问与修改、数组遍历、数组操作、多维数组、数组与可变参数)

Kotlin 概述

  1. Kotlin 由 JetBrains 开发,是一种在 JVM(Java 虚拟机)上运行的静态类型编程语言

  2. Kotlin 旨在提高开发者的编码效率和安全性,同时保持与 Java 的高度互操作性

  3. Kotlin 是 Android 应用开发的首选语言,也可以与 Java 一样用于服务器端开发


一、数组的创建

1、基本类型数组创建
  1. 使用工厂函数创建
val byteArray: ByteArray = byteArrayOf(1, 2, 3)
val shortArray: ShortArray = shortArrayOf(1, 2, 3)
val intArray: IntArray = intArrayOf(1, 2, 3)
val longArray: LongArray = longArrayOf(1L, 2L, 3L)val floatArray: FloatArray = floatArrayOf(1f, 2f, 3f)
val doubleArray: DoubleArray = doubleArrayOf(1.0, 2.0, 3.0)val charArray: CharArray = charArrayOf('a', 'b', 'c')val booleanArray: BooleanArray = booleanArrayOf(true, false, true)
// 使用工厂函数创建空数组val intArr1 = emptyArray<Int>()
// 创建指定大小的数组(元素初始化为 null)val intArr2 = arrayOfNulls<Int>(5)
  1. 使用构造函数创建
// 创建大小为 10 的数组,初始化为 0
val intArray1: IntArray = IntArray(10)
// 创建大小为 10 的数组,使用 lambda 表达式初始化
val intArray2: IntArray = IntArray(10) {it * 2
}
2、非基本类型数组创建
  1. 使用工厂函数创建
val stringArray: Array<String> = arrayOf("a", "b", "c")
// 使用工厂函数创建空数组val stringArr1 = emptyArray<String>()
// 创建指定大小的数组(元素初始化为 null)val stringArr2 = arrayOfNulls<String>(5)
  1. 使用构造函数创建
// 创建大小为 10 的数组,使用 lambda 表达式初始化val stringArray: Array<String> = Array(10) {"Hello, $it"
}

二、数组元素的访问与修改

  1. 使用方括号访问与修改
val intArray: IntArray = intArrayOf(1, 2, 3)println(intArray[0])intArray[0] = 10println(intArray[0])
# 输出结果1
10
  1. 使用 set 方法访问与修改
val intArray: IntArray = intArrayOf(1, 2, 3)println(intArray[0])intArray.set(0, 10)println(intArray[0])
# 输出结果1
10

三、数组遍历

  1. 使用 for 循环遍历
val numbers: IntArray = intArrayOf(1, 2, 3)for (number in numbers) {println(number)
}
# 输出结果1
2
3
  1. 使用索引遍历
val numbers: IntArray = intArrayOf(1, 2, 3)for (i in numbers.indices) {println(numbers[i])
}
# 输出结果1
2
3
  1. 使用 withIndex 遍历
val numbers: IntArray = intArrayOf(1, 2, 3)for ((index, value) in numbers.withIndex()) {println("$index: $value")
}
# 输出结果0: 1
1: 2
2: 3
  1. 使用 forEach 遍历
val numbers: IntArray = intArrayOf(1, 2, 3)numbers.forEach { println(it) }
# 输出结果1
2
3
  1. 使用 forEachIndexed 遍历
val numbers: IntArray = intArrayOf(1, 2, 3)numbers.forEachIndexed { index, value ->println("$index: $value")
}
# 输出结果0: 1
1: 2
2: 3

四、数组操作

  1. 数组转换为 List
val numbers = intArrayOf(1, 2, 3, 4, 5)val list = numbers.toList()println(list)
# 输出结果[1, 2, 3, 4, 5]
  1. 数组切片
val numbers = intArrayOf(1, 2, 3, 4, 5)val slice = numbers.sliceArray(1..3)println(slice.contentToString())
# 输出结果[2, 3, 4]
  1. 数组过滤
val numbers = intArrayOf(1, 2, 3, 4, 5)val evens = numbers.filter { it % 2 == 0 }.toIntArray()println(evens.contentToString())
# 输出结果[2, 4]
  1. 数组映射
val numbers = intArrayOf(1, 2, 3, 4, 5)val squares = numbers.map { it * it }.toIntArray()println(squares.contentToString())
# 输出结果[1, 4, 9, 16, 25]
  1. 数组排序
val numbers = intArrayOf(3, 4, 5, 1, 2)// 升序
val sorted = numbers.sortedArray()println(sorted.contentToString())// 降序
val sortedDesc = numbers.sortedArrayDescending()println(sortedDesc.contentToString())
# 输出结果[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]
  1. 数组查找
val numbers = intArrayOf(1, 2, 3, 4, 5)val firstEven = numbers.find { it % 2 == 0 }println(firstEven)val anyGreaterThan10 = numbers.any { it > 10 }println(anyGreaterThan10)
# 输出结果2
false

五、多维数组

  1. 创建二维数组
// 3 * 3 的二维数组,初始化为 0
val matrix = Array(3) { IntArray(3) }
  1. 初始化二维数组
val matrix = arrayOf(intArrayOf(1, 2, 3),intArrayOf(4, 5, 6),intArrayOf(7, 8, 9)
)println(matrix[1][0])
println(matrix[1][1])
println(matrix[1][2])
# 输出结果4
5
6

六、数组与可变参数

  • 使用 vararg 关键字表示可变参数,本质上就是数组
fun printAll(vararg messages: String) {for (m in messages) println(m)
}
printAll("Hello", "World", "Kotlin")val array = arrayOf("a", "b", "c")
printAll(*array)
# 输出结果Hello
World
Kotlin
a
b
c

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

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

相关文章

gitlab+portainer 实现Ruoyi Vue前端CI/CD

1. 场景 最近整了一个Ruoyi Vue 项目&#xff0c;需要实现CICD&#xff0c;经过一番坎坷&#xff0c;最终达成&#xff0c;现将技术要点和踩坑呈现。 具体操作流程和后端大同小异&#xff0c;后端操作参考连接如下&#xff1a; https://blog.csdn.net/leinminna/article/detai…

RNN神经网络

RNN神经网络 1-核心知识 1-解释RNN神经网络2-RNN和传统的神经网络有什么区别&#xff1f;3-RNN和LSTM有什么区别&#xff1f;4-transformer的归一化有哪几种实现方式 2-知识问答 1-解释RNN神经网络 Why&#xff1a;与我何干&#xff1f; 在我们的生活中&#xff0c;很多事情…

javaweb-html

1.交互流程&#xff1a; 浏览器向服务器发送http请求&#xff0c;服务器对浏览器进行回应&#xff0c;并发送字符串&#xff0c;浏览器能对这些字符串&#xff08;html代码&#xff09;进行解释&#xff1b; 三大web语言&#xff1a;&#xff08;1&#xff09;html&#xff1a…

从混乱到高效:我们是如何重构 iOS 上架流程的(含 Appuploader实践)

从混乱到高效&#xff1a;我们是如何重构 iOS 上架流程的 在开发团队中&#xff0c;有一类看不见却至关重要的问题&#xff1a;环境依赖。 特别是 iOS App 的发布流程&#xff0c;往往牢牢绑死在一台特定的 Mac 上。每次需要发版本&#xff0c;都要找到“那台 Mac”&#xff…

FPGA:CLB资源以及Verilog编码面积优化技巧

本文将先介绍Kintex-7系列器件的CLB&#xff08;可配置逻辑块&#xff09;资源&#xff0c;然后分享在Verilog编码时节省CLB资源的技巧。以下内容基于Kintex-7系列的架构特点&#xff0c;并结合实际设计经验进行阐述。 一、Kintex-7系列器件的CLB资源介绍 Kintex-7系列是Xilin…

在linux里上传本地项目到github中

首先先安装git&#xff0c;安装完git后&#xff0c;输入如下操作指令&#xff1a; 输入自己的用户名和邮箱&#xff08;为注册GITHUB账号时的用户名和邮箱&#xff09;&#xff1a; git config --global user.name "111"git config --global user.email "121…

鸿蒙Flutter实战:25-混合开发详解-5-跳转Flutter页面

概述 在上一章中&#xff0c;我们介绍了如何初始化 Flutter 引擎&#xff0c;本文重点介绍如何添加并跳转至 Flutter 页面。 跳转原理 跳转原理如下&#xff1a; 本质上是从一个原生页面A 跳转至另一个原生页面 B&#xff0c;不过区别在于&#xff0c;页面 B是一个页面容器…

c语言 写一个五子棋

c语言 IsWin判赢 display 画 10 x 10 的棋盘 判断落子的坐标是否已有棋子 判断落子坐标范围是否超出范围 // 五子棋 #include <stdio.h> #include <stdlib.h>// 画棋盘 10 x 10的棋盘&#xff0c;len为行数 void display(char map[][10], int len) {system(&q…

格雷希尔快速封堵接头,解决新能源汽车的气密性检测和三电系统的综合测试

我国的新能源汽车已经遥遥领先&#xff0c;让其他国家望尘莫及。格雷希尔GripSeal&#xff0c;为新能源汽车制造业提供快速可靠的密封连接器&#xff0c;让测试速度加倍。以好抓取、易密封为设计理念&#xff0c;实现一秒连接&#xff0c;瞬时密封的高效性能。通过持续的产品设…

人工智能全景解析:从技术原理到未来趋势的深度探索

人工智能(AI)作为21世纪最具变革性的技术之一&#xff0c;正以前所未有的速度重塑着人类社会。从智能手机中的语音助手到工厂里的智能机器人&#xff0c;从医疗诊断系统到金融风控模型&#xff0c;AI技术已渗透到我们生活和工作的方方面面。本文将全面解析人工智能的发展历程、…

[密码学实战]使用C语言实现TCP服务端(二十九)

[密码学实战]使用C语言实现TCP服务端(二十九) 引言 TCP(传输控制协议)是互联网通信中最核心的协议之一,它提供可靠的、面向连接的数据传输服务。通过C语言的标准Socket API,开发者可以灵活地实现TCP客户端和服务端程序。本文将详细讲解TCP通信的原理,并提供完整的代码…

IPv4 地址嵌入 IPv6 的前缀转换方式详解

1. 概述 在 IPv4 和 IPv6 网络共存的过渡期&#xff0c;NAT64&#xff08;Network Address Translation 64&#xff09;是一种关键技术&#xff0c;用于实现 IPv6-only 网络与 IPv4-only 网络的互操作。NAT64 前缀转换通过将 IPv4 地址嵌入到 IPv6 地址中&#xff0c;允许 IPv…

动态神经网络(Dynamic NN)在边缘设备的算力分配策略:MoE架构实战分析

一、边缘计算场景的算力困境 在NVIDIA Jetson Orin NX&#xff08;64TOPS INT8&#xff09;平台上部署视频分析任务时&#xff0c;开发者面临三重挑战&#xff1a; 动态负载波动 视频流分辨率从480p到4K实时变化&#xff0c;帧率波动范围20-60FPS 能效约束 设备功耗需控制在1…

算法优选系列(9.BFS 解决拓扑排序)

目录 拓扑排序简介&#xff1a; ​编辑 课程表&#xff08;medium&#xff09;&#xff1a; 课程表II&#xff08;medium&#xff09;: 火星词典&#xff08;hard&#xff09;&#xff1a; 拓扑排序简介&#xff1a; 有向无环图&#xff08;DAG图&#xff09; 如上图每条边…

SpringBoot3+Vue3(1)-后端 请求头校验,jwt退出登录,mybaits实现数据库用户校验

1.后端&#xff1a;jwt请求头校验 解析 工具类jwtUtils 解析token 令牌是否过期&#xff0c;验证 正常、异常、运行时错误 倒入工具类是resource 工具类中添加解析用户的方法&#xff1a; 在 在工具类添加id解析 此处调用 添加controller做测试 测试&…

【免杀】C2免杀技术(八)APC注入

本文主要写点自己的理解&#xff0c;如有问题&#xff0c;请诸位指出&#xff01; 概念和流程 “APC注入”&#xff08;APC Injection&#xff09;是免杀与恶意代码注入技术中的一种典型方法&#xff0c;主要用于在目标进程中远程执行代码&#xff0c;常见于后门、远控、植入型…

git工具使用

安装Git 在开始使用Git之前&#xff0c;需要在本地计算机上安装Git工具。Git支持Windows、macOS和Linux系统。可以从Git官方网站下载适合操作系统的安装包&#xff0c;并按照安装向导进行安装。 bash复制插入 # 在Linux上安装Git sudo apt-get install git# 在macOS上安装Git…

SpringBoot微服务编写Dockerfile流程及问题汇总

背景 跟 Docker 磕了两天&#xff0c;将一个包含 N 个微服务的应用部署包改造&#xff0c;使其能够生成 Docker 镜像&#xff0c;并在 Docker 容器中运行。几年前玩过 Docker&#xff0c;隐约记得几个命令「Dockerfile 命令&#xff1a;黑卡饮料、山楂果费、哦SUV&#xff0c;…

pytorch语法学习

启动 python main.py --config llve.yml --path_y test -i output

基于LiveData和ViewModel的路线管理实现(带PopupWindow删除功能)

包含RecyclerView绑定、PopupWindow删除功能和SharedPreferences持久化存储。 1. RouteInfo类(实现Parcelable接口) java 复制 下载 import android.os.Parcel; import android.os.Parcelable;public class RouteInfo implements Parcelable {private Integer routeID;p…