Kotlin中的Set 和 Map

Kotlin中的Set 和 Map

Set
Sample
val numbers = listOf(0, 3, 8, 4, 0, 5, 5, 8, 9, 2)
val setOfNumbers = numbers.toSet()
println("set:${setOfNumbers}")
val set1 = setOf(1,2,3)
val set2 = mutableSetOf(3,2,1)
println("$set1 == $set2:${set1 == set2}")
Print

set:[0, 3, 8, 4, 5, 9, 2]
[1, 2, 3] == [3, 2, 1]:true
contains 7: false

即使一个是可变的,一个不是,并且它们的项的顺序不同,它们仍然被认为是相等的,因为它们包含完全相同的一组项

Map
Sample
 val ages = mapOf<String,Int>(
            "David" to 20)
//可变Map
val peopleAges = mutableMapOf<String,Int>(
    "Fred" to 30,
    "Ann" to 23
)
peopleAges.put("Barbara",42)
//速记符号
peopleAges["Joe"] = 51
println(peopleAges)
Print

{David=20}
{Fred=30, Ann=23, Barbara=42, Joe=51}

处理集合的有用函数
forEach
for (people in peopleAges){
    print("${people.key} is ${people.value},")
}
println()
peopleAges.forEach {
    print("${it.key} is ${it.value},")
}
Print

Fred is 30,Ann is 23,Barbara is 42,Joe is 51,
Fred is 30,Ann is 23,Barbara is 42,Joe is 51,

forEach它与for循环类似,但更紧凑一些,forEach不需要为当前项指定变量,而是使用特殊标识符it

注意,在调用forEach()方法时不需要添加圆括号,只需用花括号{}传递代码。

map

map()函数(不应与上面的map或dictionary集合混淆)对集合中的每个item进行转换。

返回一个列表,其中包含 将给定的[transform]函数应用到原始map中的每个条目 的结果

println(peopleAges.map { "${it.key} is ${it.value}" }.joinToString (","))
print

Fred is 30,Ann is 23,Barbara is 42,Joe is 51

map 函数

解读:

peopleAges.map将转换应用于peopleAges中的每个项,并创建转换后的项的新集合

花括号{}中的部分定义了应用到每个项的转换。转换接受一个键值对并将其转换为一个字符串,例如<Fred, 31>转换为Fred is 31。

joinToString(", “)将转换后的集合中的每个项添加到字符串中,字符串之间用”,"并且它知道不将其添加到最后一个项中

filter

根据表达式返回一个集合中匹配的项

val filteredNames = peopleAges.filter { it.key.length < 4 }
println(filteredNames)
print

{Ann=23, Joe=51}

在本例中,表达式获取键的长度(字符串),并检查它是否小于4。任何匹配的项,即名称少于4个字符的项,都将添加到新的集合中

将filter 应用于Map时返回的类型是一个新Map(LinkedHashMap)。您可以对Map进行额外处理,或将其转换为另一种类型的集合,如List。

val  filterList = filteredNames.toList()
println(filterList)
print

其转换为另一种类型的集合,如List。

val  filterList = filteredNames.toList()
println(filterList)
print

[(Ann, 23), (Joe, 51)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值