> 文章列表 > kotlin教程2:基础数据结构

kotlin教程2:基础数据结构

kotlin教程2:基础数据结构

文章目录

数列

前面讲解for循环时,用到的a..b表达式,生成的就是一个从ab的自然等差数列

for(i in 1..3){println(i)
}

这种等差数列生成方法可以通过step来调整步长,通过用downTo取代..,可以实现从大到小排列

for(i in 1..8 step 2) print("$i, ")
// 1, 3, 5, 7,
for(i in 8 downTo 1 step 2) print("$i, ")
// 8, 6, 4, 2,

数列作为一个对象,提供了first, last, step三个成员

val a = 1..8 step 2
a.step      // kotlin.Int = 2
a.first     //kotlin.Int = 1
a.last      //kotlin.Int = 7

数列并不支持索引操作,但可以通过in进行遍历,此外,还提供了forEach方法,这个方法内置了迭代变量it

(1..5).forEach{ print("$it, ") }
// 1, 2, 3, 4, 5,

数组

数组是kotlin中的基本类型,用Array类表示,内部封装了forEach方法,可对数组内容进行迭代。

有两种创建方法,一种是通过arrayOf函数,将一系列数值转为数组

arrayOf(1,2,3).forEach{ print("$it, ") }
/* 打印数组的值
1, 2, 3,*/

另一种是通过Array函数迭代创建,

val asc = Array(3){i -> i}
asc.forEach{ print("$it, ") }
/* 打印数组的值
0, 1, 2*/

其中,i->ilambda表达式。

和数列不同,数组支持通过方括号对其内容进行索引,其索引地址从0开始

println(asc[0])
// 0
asc[0] = asc[1] + asc[2]
println(asc[0])     // 3

数组不支持直接进行算术计算,并对+进行了运算符重载,表示在末尾新增元素

(asc+1).forEach{ print("$it, ") }
// 3, 1, 2, 1,
(asc+asc).forEach{ print("$it, ") }
// 3, 1, 2, 3, 1, 2,

字符串

kotlin中字符串用String表示,字符串内容由双引号括起。对于数组中可用的索引、forEachin等方法均适用于字符串,并且同样重载了+运算符

val str = "hello kotlin"
str[0]      // k
str.forEach{println(it)}
/*
h
e
l
l
ok
o
t
l
i
n*/
str + str
// hello kotlinhello kotlin

通过"$x"可以将x转为字符串之后嵌入到字符串中,是kotlin中常用的字符串格式化输出方法。kotlin字符串也支持一些常见的转义字符,例如\\n表示回车。

集合对象

kotlin提供了列表、集合以及字典三种集合对象,其内容较多,所以在这仅简要介绍其创建、索引以及最常用的方法,这三种数据结构特点如下

  • List 为有序集合,可通过索引访问元素
  • Set 是唯一元素的集合,没有顺序
  • Map 键值对集合,键是唯一的,每个键都刚好映射到一个值,通过键可以对值进行索引

下面分别创建三种数据结构

val lst = listOf("a", "b", "c", "a")
println(lst)    // [a, b, c, a]
println(lst[0]) // a
val sLst = setOf("a", "b", "c", "a")
println(sLst)  // [a, b, c],集合元素唯一,且不可索引
val dct = mapOf("a" to 1, "b" to 2)
dct["a"]        //1

三者均支持forEach,但字典在迭代时的迭代变量it是键值对的形式,如果想单独打印keyvalue,可以采用it.keyit.value

dct.forEach{println(it)}
/*
a=1
b=2
*/