kotlin教程2:基础数据结构
数列
前面讲解for
循环时,用到的a..b
表达式,生成的就是一个从a
到b
的自然等差数列
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->i
是lambda
表达式。
和数列不同,数组支持通过方括号对其内容进行索引,其索引地址从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
表示,字符串内容由双引号括起。对于数组中可用的索引、forEach
、in
等方法均适用于字符串,并且同样重载了+
运算符
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
是键值对的形式,如果想单独打印key
或value
,可以采用it.key
或it.value
。
dct.forEach{println(it)}
/*
a=1
b=2
*/