目次
1.リスト配列
1、getOrElse、getOrNull 学習
kotlin は operator 関数を使用するため、kotlin 配列は [] 演算子を使用してデータを取得できます。getOrElse または getOrNull を使用して要素を取得し、Java でよく発生する配列の範囲外の問題を回避してください。
fun main() {
listTest()
}
fun listTest() {
var l : List<String> = listOf<String>("ZhangSan" , "LiSi" , "WangWu" , "ZhaoLiu")
println(l[0])
println(l[1])
println(l[2])
println(l[3])
//println(l[4]) 越界崩溃
println(l.getOrElse(4) {"$it 你越界了哈!"})
println()
println(l.getOrNull(5))
}
/**
打印值
ZhangSan
LiSi
WangWu
ZhaoLiu
4 你越界了哈!
null
* */
1. getOrElse の最初のパラメーターは取得する添字値、2 番目のパラメーターはラムダ関数、戻り値はジェネリック (リストのデータ型) です。入力添え字が範囲外の場合、ラムダの戻り値がクラッシュせずに返されます。
2. getOrNull は取得する添え字としてパラメーターを受け取り、配列が範囲外の場合は null を返し、クラッシュしません。
二、MutableList変数配列
MutableList は変更可能なコレクションであり、追加や削除などの操作を使用でき、演算子のオーバーロードに += -= 操作を使用できます。
removeIf を使用すると、指定された型のすべての要素をバッチで削除できます。これは、コレクションをトラバースして、各要素がラムダ式によって指定された基準を満たしているかどうかを判断してから、指定された要素を削除することと同じです。
MutableList と List は相互に変換できます。l.toList() l.toMutableList()
fun main() {
val l : MutableList<String> = mutableListOf<String>("ZhangSan" , "LiSi" , "WangWu" , "ZhaoLiu")
l.removeAt(1)
l.add("零零散散")
println("集合1 : $l")
println()
//运算符重载
l += "张三"
l += "王五"
l += "张老六"
l -= "ZhangSan"
println("集合2 : $l")
//测试getOrNull,数组越界
println(l.getOrNull(600))
//删除,条件是lambda表达式为true的元素,it为list中的每一个元素
l.removeIf {
it.contains("张")
}
println("集合3 : $l")
l += "张三"
l += "王五"
l += "张老六"
//遍历相关
for (v in l) {
print("元素 $ v , ")
}
println()
l.forEach{
print("元素:$it , ")
}
println()
//forEachIndexed接收两个参数
l.forEachIndexed{index , item ->
print("元素:{$index} 值为 $item , ")
}
l.toList() ;
l.toMutableList() ;
println()
}
/**
* 输出
* 集合1 : [ZhangSan, WangWu, ZhaoLiu, 零零散散]
集合2 : [WangWu, ZhaoLiu, 零零散散, 张三, 王五, 张老六]
null
集合3 : [WangWu, ZhaoLiu, 零零散散, 王五]
元素 $ v , 元素 $ v , 元素 $ v , 元素 $ v , 元素 $ v , 元素 $ v , 元素 $ v ,
元素:WangWu , 元素:ZhaoLiu , 元素:零零散散 , 元素:王五 , 元素:张三 , 元素:王五 , 元素:张老六 ,
元素:{0} 值为 WangWu , 元素:{1} 值为 ZhaoLiu , 元素:{2} 值为 零零散散 , 元素:{3} 值为 王五 , 元素:{4} 值为 张三 , 元素:{5} 值为 王五 , 元素:{6} 值为 张老六 ,
* */
3. リストのトラバース用
非常にシンプルで、主に until、..、downTo、step キーワードを使用し、コードを確認するだけです
//until 左关右开
for (i in 0 until 50){
print("$i ")//输出 0 - 49
}
println()
//.. 左关右关
for (i in 0..50){
print("$i ")//输出 0 - 50
}
val ll = 0..50
println(ll)
//downTo自降方式,左闭右闭
for (i in 50 downTo 0) {
print("$i ")//输出 0 - 50
}
println()
//step设置步长
for (i in 50 downTo 0 step 2) {
print("$i ")//输出 0 - 50
}
println()
//遍历列表,直接使用until避免最后一个元素越界问题
println("使用for加下标遍列表:")
for (i in 0 until l.size) {
print("${l[i]} , ")
}
println()
//逆向遍历列表
for (i in l.size-1 downTo 0) {
print("${l[i]} , ")
}