• Kotlin学习快速入门(4)——集合使用


    List,Set,Map都是集合

    • List 是一个有序集合,可通过索引(反映元素位置的整数)访问元素。元素可以在 list 中出现多次。列表的一个示例是一句话:有一组字、这些字的顺序很重要并且字可以重复。
    • Set 是唯一元素的集合。它反映了集合(set)的数学抽象:一组无重复的对象。一般来说 set 中元素的顺序并不重要。例如,字母表是字母的集合(set)。
    • Map(或者字典)是一组键值对。键是唯一的,每个键都刚好映射到一个值。值可以重复。map 对于存储对象之间的逻辑连接非常有用,例如,员工的 ID 与员工的位置。

    创建集合

    一般使用标准库中的方法来快速创建集合, listOf()、setOf()、mutableListOf()、mutableSetOf()

    当然,也可以使用Java的集合的构造方法

    val numbers = listOf(0,1,2,3,4)
    

    空集合:emptyList()、emptySet() 与 emptyMap(),需要指定类型

    val empty = emptyList<String>()
    

    取集合一部分

    slice

    val numbers = listOf(0,1,2,3,4)
    //按顺序取
    println(numbers.slice(1..3))//[1,2,3]
    //按步长取
    println(numbers.slice(0..4 step 2))//[0,2,4]
    //取指定下标
    println(numbers.slice(setOf(3, 4, 0)))//[3,4,0]
    

    take 取n个元素

    • take(n: Int) 从数组中按顺序取n个元素
    • takeLast(n: Int) 取末尾n个元素
    • takeWhile{expresstion} 一直取,不满足条件就停止
    • takeWhileLast{expresstion} 从后面取,不满足条件就停止
    val numbers = listOf(0,1,2,3,4)
    println(numbers.take(3))//[0,1,2]
    println(numbers.takeLast(3))//[2,3,4]
    
    val numbers = listOf("one", "two", "three", "four", "five", "six")
    println(numbers.takeWhile { !it.startsWith("three") })//[one,two]
    println(numbers.takeLastWhile { !it.startsWith("three") })//[four, five, six]
    

    drop

    • drop(n: Int) 丢弃数组n个元素
    • dropLast(n: Int) 丢弃数组末尾n个元素
    • dropWhile{expresstion} 一直丢,不满足条件就停止
    • dropWhileLast{expresstion} 从后面丢,不满足条件就停止
    val numbers = listOf(0,1,2,3,4)
    println(numbers.drop(3))//[3,4]
    println(numbers.dropLast(3))//[0,1]
    
    val numbers = listOf("one", "two", "three", "four", "five", "six")
    println(numbers.dropWhile { !it.startsWith("three") })//three, four, five, six
    println(numbers.dropLastWhile { !it.startsWith("three") })//[one, two, three]
    

    filter

    • filter{experssion} 取满足条件的元素
    • filterNot{experssion} 取不满足条件的元素
    • filterIndexed{experssion} 如果条件中需要使用下标值,则使用这个方法
    • filterIsInstance<类型>() 元素是否为某个类型
    val numbers = listOf("one", "two", "three", "four", "five", "six")
    val longerThan3 = numbers.filter { it.length > 3 }
    println(longerThan3)//[three,four,five]
    
    val numbers = listOf("one", "two", "three", "four")
    val filteredIdx = numbers.filterIndexed { index, s -> (index != 0) && (s.length < 5)  }
    println(filteredIdx)//[two,four]
    
    val numbers = listOf(null, 1, "two", 3.0, "four")
    //这里只获得list中的String类型数据
    println(numbers.filterIsInstance<String>())//[two,four]
    

    partition 分组

    val numbers = listOf(2,3,4,5,6)
    //上一节类中说过的数据类自动解析,match是满足,rest则是不满足
    val (match, rest) = numbers.partition { it%2==0}
    println(match)
    println(rest)
    

    检验数组是否满足条件

    • any{expression} 数组中有任意一个元素满足条件,返回true
    • none{expression} 数据中没有一个元素满足条件,返回true
    • all{expression} 数组中全部元素满足条件,返回true
    val numbers = listOf("one", "two", "three", "four")
    println(numbers.any { it.endsWith("e") })
    println(numbers.none { it.endsWith("a") })
    println(numbers.all { it.endsWith("e") })
    

    取某个元素

    • [index] list也可以使用
    • get(index) 平常方法
    • elementAt(index) 新增的方法
    • find{} 找到某个满足条件的第一个元素
    • findLast{} 找到满足条件的最后一个元素
    • random() 取随机

    聚合操作

    • min() 最小
    • max() 最大
    • average() 平均
    • sum() 求和
    • count() 计数

    排序

    • sort() 升序
    • sortDescending() 降序

    参考

    Kotlin集合

  • 相关阅读:
    .NET设计模式观察者模式(Observer Pattern)
    .NET设计模式建造者模式(Builder Pattern)
    .NET设计模式结构型模式专题总结
    MFC深入浅出MFC的进程和线程
    .NET设计模式享元模式(Flyweight Pattern)
    MFC深入浅出CObject类
    不足80行,一种清晰而又简单通用的分页算法,你有这么想过吗?C#版
    .net生成静态页方法总结
    仅IE9/10/(Opera)同时支持script元素的onload和onreadystatechange事件
    结果分类Ajax之三
  • 原文地址:https://www.cnblogs.com/stars-one/p/11264487.html
Copyright © 2020-2023  润新知