kotlin练习 ---- 数组练习

kotlin练习 ---- 数组练习

数组创建

  1. 使用arrayOf()函数:这种方式无需显示指定数组的长度,但需要依次列出每个数组元素。
fun main(args: Array<String>) {
    //创建包含指定元素的数组
    var arg1 = arrayOf("Java","Kotlin","PHP","Swift")
    var arg2 = arrayOf(0,1,2,3,4,5)
    println("arg1 = ${Arrays.toString(arg1)}")
    println("arg2 = ${Arrays.toString(arg2)}")
}
  1. 使用arrayOfNulls()函数:这种方法需要显示指定数组的长度,数组元素全部被初始化为null。
fun main(args: Array<String>) {
    //创建指定长度,元素为null的数组
    var arg3 = arrayOfNulls<Int>(5)
}

  1. 使用emptyArray()函数:这种方法会创建一个长度为0的空数组。
fun main(args: Array<String>) {
    //创建长度为0的空数组
    var arg4 = emptyArray<String>()
    var arg5 = emptyArray<Int>()
}

  1. 使用Array(size : Int,init :(Int) -> T )构造器:这种方法需要显示指定数组的长度,并可通过Lambda表达式来动态计算各数组元素的值,
fun main(args: Array<String>) {
    //创建指定长度,使用Lambda表达式初始化数组元素的数组
    var arg6 = Array(5,{(it * 2+97).toChar()})
    var arg7 = Array(6,{"fkit"})
    println("arg6 = ${Arrays.toString(arg6)}")
    println("arg7 = ${Arrays.toString(arg7)}")
}

  1. 其他 Array<T>:Kotlin专门提供了 ByteArray、ShortArray、IntArra、LongArray、CharArray、FloatArray、DoubleArray、BooleanArray 分别对应java中的 byte[]、short[]、int[]、long[]、char[]、floar[]、double[]、boolean[] 这8种基本数据类型的数组。
fun main(args: Array<String>) {
    var intArr = intArrayOf(2,3,4,5,6)
    var doubleArr = doubleArrayOf(2.1,2.2,2.3,2.4)
    var intArr2 = IntArray(5,{it*it})
    var charArr = CharArray(5,{(it*2+97).toChar()})

    println("intArr = ${Arrays.toString(intArr)}")
    println("doubleArr = ${Arrays.toString(doubleArr)}")
    println("intArr2 = ${Arrays.toString(intArr2)}")
    println("charArr = ${Arrays.toString(charArr)}")
}

数组使用

  • get(index) 方法 ,set(index,value)方法
fun main(args: Array<String>) {
    var strArray = arrayListOf<String>("Java","Kotlin","Go","Swift")
    println(strArray[1])//Kotlin
    println(strArray.get(1))//Kotlin
    strArray.set(0,"Python")
    strArray[2] = "Groovy"
    println(strArray.toString())//[Python, Kotlin, Groovy, Swift]
}
  • 数组遍历
fun main(args: Array<String>) {
    var books = arrayListOf<String>("疯狂java讲义", "疯狂android讲义", "疯狂kotlin讲义")
    for (book in books) {
        println(book)
    }
    for (i in 0 until books.size) {
        println(books[i])
    }
    //根据数组的索引来遍历数组
    for (i in books.indices){//索引 = size -1
        println(books[i])
    }
    for ((index,value) in books.withIndex()){//索引 = size -1
        println("索引为${index}的元素为:${value}")
    }
}
  • 数组常用方法
   var indexs = arrayOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9)
    //所有元素都要满足条件则返回 true
    var isAll = indexs.all { x -> x > 0 && x < 10 }
    print(isAll)//true
    //任一数组元素满足条件则返回 true
    var isAny = indexs.any { x -> x == 9 }
    println(isAny)//true
    //将数组转为List集合
    var indexList = indexs.asList()
    println(indexList.toString())
    //返回Map集合
    var indexMap1 = indexs.associate { x -> x to x * x }
    println(indexMap1.toString())//{1=1, 2=4, 3=9, 4=16, 5=25, 6=36, 7=49, 8=64, 9=81}
    var indexMap2 = indexs.associate { it to it * it }
    println(indexMap2.toString())//{1=1, 2=4, 3=9, 4=16, 5=25, 6=36, 7=49, 8=64, 9=81}
    //返回Map集合
    var indexMap3 = indexs.associateBy { it * it }//Map<K,T>中的K
    println(indexMap3.toString())//{1=1, 4=2, 9=3, 16=4, 25=5, 36=6, 49=7, 64=8, 81=9}
    var indexMap4 = indexs.associateBy({ it }, { it * it })
    println(indexMap4.toString())//{1=1, 2=4, 3=9, 4=16, 5=25, 6=36, 7=49, 8=64, 9=81}
    var indexMap5 = indexs.associateBy({ it * it })//Map<K,T>中的K
    println(indexMap5.toString())//{1=1, 4=2, 9=3, 16=4, 25=5, 36=6, 49=7, 64=8, 81=9}
    //在将数组转成的Map集合插入map,最后返回修改后的map
    var map6 = mutableMapOf(10 to 100, 11 to 121, 12 to 144)
    var indexMap6 = indexs.associateByTo(map6, { it }, { it * it })
    println(map6.toString())//{10=100, 11=121, 12=144, 1=1, 2=4, 3=9, 4=16, 5=25, 6=36, 7=49, 8=64, 9=81}
    //在将数组转成的Map集合插入map,最后返回修改后的map
    var map7 = mutableMapOf(10 to 100, 11 to 121, 12 to 144)
    var indexMap7 = indexs.associateTo(map7, { it to it * it })
    println(map7.toString())//{10=100, 11=121, 12=144, 1=1, 2=4, 3=9, 4=16, 5=25, 6=36, 7=49, 8=64, 9=81}
    //数组平均值
    var average = indexs.average();
    println("平均值为$average")//5.0
    //通过二分法查询element出现的索引,如果找不到则返回负数-------要求数组中的元素已经按升序排序
    var binarySearch1 = indexs.binarySearch(4, 0, 3)
    println("4在数组(数组从第一个元素,到第三个元素)中的位置:$binarySearch1")//-4
    var binarySearch2 = indexs.binarySearch(4)
    println("4在数组中的位置:$binarySearch2")//3
    //判断数组中是否包含元素
    var contains = indexs.contains(10);
    println("数组中是否有元素10:${contains}")//false

    var indexs1 = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
    //判断两个数组是否相等
    var contentDeepEquals = indexs.contentDeepEquals(indexs1)
    println("两个数组是否相等:${contentDeepEquals}")//true
    //将数组转成String
    var str_index = indexs.contentToString();
    println(str_index)//[1, 2, 3, 4, 5, 6, 7, 8, 9]
    //复制数组成为一个新数组
    var copyof1 = indexs.copyOf()
    println("copyof1 = ${copyof1.contentToString()}")//[1, 2, 3, 4, 5, 6, 7, 8, 9]
    indexs[0] = 0;
    println("copyof1 = ${copyof1.contentToString()}")//[1, 2, 3, 4, 5, 6, 7, 8, 9]
    indexs[0] = 1;
    var copyof2 = indexs.copyOf(5)
    println("copyof2 = ${copyof2.contentToString()}")//[1, 2, 3, 4, 5]
    var copyof3 = indexs.copyOf(10)
    println("copyof3 = ${copyof3.contentToString()}")//[1, 2, 3, 4, 5, 6, 7, 8, 9, null]
    //复制数组(通过索引指定)
    var copyOfRange1 = indexs.copyOfRange(0, 10)
    println("copyOfRange1 = ${copyOfRange1.contentToString()}")//[1, 2, 3, 4, 5, 6, 7, 8, 9, null]
    indexs[0] = 10
    println("copyOfRange1 = ${copyOfRange1.contentToString()}")//[1, 2, 3, 4, 5, 6, 7, 8, 9, null]
    indexs[0] = 1
    var copyOfRange2 = indexs.copyOfRange(0, 5)
    println("copyOfRange2 = ${copyOfRange2.contentToString()}")//[1, 2, 3, 4, 5]
    //数组满足条件的数量
    var count1 = indexs.count({ it > 5 })
    println("数组中大于5的元素有:${count1}个")//4

    var indexs2 = arrayOf(1, 2, 3, 1, 4, 2, 3, 4, 1)
    //去掉数组中重复的元素
    var indexs2_distinct1 = indexs2.distinct()
    println(indexs2_distinct1.toString())//[1, 2, 3, 4]
    var indexs2_distinct2 = indexs2.distinctBy { it % 2 == 0 }
    println(indexs2_distinct2.toString())//[1, 2]

    //去掉数组中前3个元素
    var drop = indexs.drop(3);
    println(drop.toString())

    //去掉前面满足条件的元素,当出现第一个条件不满足时,返回后面的所有元素
    var dropWhile = indexs.dropWhile { it <= 3 }
    println(dropWhile.toString())//[4, 5, 6, 7, 8, 9]

    //去掉数组中后3个元素
    var dropLast = indexs.dropLast(3);
    println(dropLast.toString())//[1, 2, 3, 4, 5, 6]

    //去掉前面满足条件的元素,当出现第一个条件不满足时,返回前面的所有元素
    var dropLastWhile = indexs.dropLastWhile { it > 6 }
    println(dropLastWhile.toString())//[1, 2, 3, 4, 5, 6]

    //将数组中的元素赋值为element
    var indexs4 = arrayOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9)
    indexs4.fill(3)
    println(indexs4.contentToString())//[3, 3, 3, 3, 3, 3, 3, 3, 3]

    var indexs5 = arrayOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9)
    indexs5.fill(3, 0, 5);
    println(indexs5.contentToString())//[3, 3, 3, 3, 3, 6, 7, 8, 9]

    var first1 = indexs.first()
    println("数组的第一个元素:${first1}")//1
    var first2 = indexs.first { it > 5 }
    println("数组的第一个满足条件的元素:${first2}")//6

    var last1 = indexs.last()
    println("数组的最后一个元素:${last1}")//9
    var last2 = indexs.last { it > 5 }
    println("数组的最后一个满足条件的元素:${last2}")//9

    //求和
    var fold = indexs.fold(0, { acc, i -> acc + i })
    println("数组元素和为:${fold}")
    //搜索元素查询的位置
    var index1 = indexs.indexOf(5)//从前往后
    var index2 = indexs.lastIndexOf(5)//从后往前
    println("元素5在数组中的位置是:${index1}和${index2}")

    var indexs6 = arrayOf(1, 2, 3, 1, 4, 2, 3, 4, 1)
    var index3 = indexs6.indexOfFirst { it == 3 }//第一次出现的位置
    var index4 = indexs6.indexOfLast { it == 3 }//最后一次查询的位置
    println("元素3在数组中第一次出现在${index3},最后一次出现在${index4}")//2,6

    var indexs7 = arrayListOf<Int>(3, 4, 5, 6, 7, 8, 9)
    var indexs8 = arrayListOf<Int>(1, 2, 5, 6)
    //intersect(交集),subtract(差集),union(并集),minus(补集)
    var intersect = indexs7.intersect(indexs8)
    var subtract = indexs7.subtract(indexs8)
    var union = indexs7.union(indexs8)
    var minus = indexs7.minus(indexs8)
    println("交集:${intersect}")//[5, 6]
    println("差集:${subtract}")//[3, 4, 7, 8, 9]
    println("并集:${union}")//[3, 4, 5, 6, 7, 8, 9, 1, 2]
    println("补集:${minus}")//[3, 4, 7, 8, 9]
    //数组最大值
    var max = indexs.max();//9
    //数组最小值
    var min = indexs.min();//1
    println("数组中的最大值:${max} 最小值:${min}")

    var indexs9 = arrayListOf<Int>(1, 9, 3, 7, 2, 5, 4, 6, 8)
    //排序
    indexs9.sort();
    println(indexs9)//[1, 2, 3, 4, 5, 6, 7, 8, 9]
    //排序
    val mapList = mutableListOf(1 to "A" , 2 to "B", 5 to "C", 3 to "D")
    mapList.sortBy { it.first }
    println(mapList) // [(1, A), (2, B), (3, D), (5, C)]
    mapList.sortBy { it.second }
    println(mapList) // [(1, A), (2, B), (5, C), (3, D)]
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容