Kotlin - 地图



Kotlin map 是一个键值对的集合,其中每个键都是唯一的,并且只能与一个值关联。虽然同一个值可以与多个键关联。我们可以声明键和值为任何类型;没有限制。

Kotlin map 可以是可变的(mutableMapOf)或只读的(mapOf)。

在其他编程语言中,地图也称为字典或关联数组。

创建 Kotlin 地图

对于地图创建,请使用标准库函数 mapOf() 用于只读地图,mutableMapOf() 用于可变地图。

可以通过将其转换为 Map 来获得可变地图的只读视图。

示例

fun main() {
    val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    println(theMap)
    
    val theMutableMap = mutableSetOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    println(theMutableMap)
}

运行上述 Kotlin 程序时,将生成以下输出

{one=1, two=2, three=3, four=4}
[(one, 1), (two, 2), (three, 3), (four, 4)]

使用 HashMap 创建地图

可以从 Java 的 HashMap 创建 Kotlin map。

示例

fun main() {
    val theMap = HashMap<String, Int>()
    
    theMap["one"] = 1
    theMap["two"] = 2
    theMap["three"] = 3
    theMap["four"] = 4
    
    println(theMap)
}

运行上述 Kotlin 程序时,将生成以下输出

{four=4, one=1, two=2, three=3}

创建地图时使用 Pair

我们可以使用 Pair() 方法创建键值对

示例

fun main() {
    val theMap = mapOf(Pair("one", 1), Pair("two", 2), Pair("three", 3))
    println(theMap)
}

运行上述 Kotlin 程序时,将生成以下输出

{one=1, two=2, three=3}

Kotlin 属性

Kotlin map 具有获取地图的所有条目、键和值的属性。

fun main() {
    val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    
    println("Entries: " + theMap.entries)
    println("Keys:" + theMap.keys)
    println("Values:" + theMap.values)
}

运行上述 Kotlin 程序时,将生成以下输出

Entries: [one=1, two=2, three=3, four=4]
Keys:[one, two, three, four]
Values:[1, 2, 3, 4]

遍历 Kotlin 地图

有多种方法可以遍历 Kotlin 地图。让我们逐一学习它们

使用 toString() 函数

fun main() {
    val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    println(theMap.toString())
}

运行上述 Kotlin 程序时,将生成以下输出

{one=1, two=2, three=3, four=4}

使用迭代器

fun main() {
    val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    
    val itr = theMap.keys.iterator()
    while (itr.hasNext()) {
        val key = itr.next()
        val value = theMap[key]
        println("${key}=$value")
    }
}

运行上述 Kotlin 程序时,将生成以下输出

one=1
two=2
three=3
four=4

使用 For 循环

fun main() {
   val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    
   for ((k, v) in theMap) {
      println("$k = $v")
   }
   
}

运行上述 Kotlin 程序时,将生成以下输出

one = 1
two = 2
three = 3
four = 4

使用 forEach

fun main() {
   val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    
   theMap.forEach { 
      k, v -> println("Key = $k, Value = $v") 
   }
}

运行上述 Kotlin 程序时,将生成以下输出

Key = one, Value = 1
Key = two, Value = 2
Key = three, Value = 3
Key = four, Value = 4

Kotlin 地图的大小

我们可以使用 size 属性或 count() 方法获取地图中元素的总数

示例

fun main() {
    val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    
    println("Size of the Map " + theMap.size)
    println("Size of the Map " + theMap.count())
}

运行上述 Kotlin 程序时,将生成以下输出

Size of the Map 4
Size of the Map 4

containsKey() 和 containsValue() 方法

containsKey() 检查地图是否包含键。containsValue() 检查地图是否包含值。

示例

fun main() {
   val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)

   if(theMap.containsKey("two")){
      println(true)
   }else{
      println(false)
   }
   
   if(theMap.containsValue("two")){
      println(true)
   }else{
      println(false)
   } 
}

运行上述 Kotlin 程序时,将生成以下输出

true
false

isEmpty() 方法

如果集合为空(不包含任何元素),则 isEmpty() 方法返回 true,否则返回 false。

示例

fun main() {
   val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    
   if(theMap.isEmpty()){
      println(true)
   }else{
      println(false)
   }
}

运行上述 Kotlin 程序时,将生成以下输出

false

get() 方法

get() 方法可用于获取与给定键对应的值。还支持简写 [key] 语法。

示例

fun main() {
   val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)

   println("The value for key two " + theMap.get("two"))
   println("The value for key two " + theMap["two"])
}

运行上述 Kotlin 程序时,将生成以下输出

The value for key two 2
The value for key two 2
还有一个函数 getValue(),其行为略有不同:如果地图中找不到键,它会抛出异常。

地图添加

我们可以使用 + 运算符将两个或多个地图添加到单个集合中。这会将第二个地图添加到第一个地图中,丢弃重复的元素。

如果两个地图中存在重复的键,则第二个地图的键将覆盖前一个地图的键。

示例

fun main() {
    val firstMap = mapOf("one" to 1, "two" to 2, "three" to 3)
    val secondMap = mapOf("one" to 10, "four" to 4)
    val resultMap = firstMap + secondMap
    
    println(resultMap)
}

运行上述 Kotlin 程序时,将生成以下输出

{one=10, two=2, three=3, four=4}

地图减法

我们可以使用 - 运算符从地图中减去一个 列表。此操作将从地图中删除列表的所有键,并返回结果。

示例

fun main() {
    val theMap = mapOf("one" to 1, "two" to 2, "three" to 3)
    val theKeyList = listOf("one", "four")
    val resultMap = theMap - theKeyList
    
    println(resultMap)
}

运行上述 Kotlin 程序时,将生成以下输出

{two=2, three=3}

从地图中删除条目

我们可以使用 remove() 方法从可变地图中删除元素,或者可以使用减号赋值 (-=) 运算符执行相同的操作

示例

fun main() {
    val theMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    theMap.remove( "two")
    println(theMap)
    
    theMap -= listOf("three")
    println(theMap)
}

运行上述 Kotlin 程序时,将生成以下输出

{one=1, three=3, four=4}
{one=1, four=4}

排序地图元素

我们可以使用 toSortedMap() 方法按升序排序元素,或使用 sortedDescending() 方法按降序排序集合元素。

您还可以使用 sortedMapOf() 方法使用给定的键值创建排序地图。只需将此方法替换为 mapOf() 即可。

示例

fun main() {
    val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    var resultMap = theMap.toSortedMap()
    println(resultMap)
}

运行上述 Kotlin 程序时,将生成以下输出

{four=4, one=1, three=3, two=2}

过滤地图元素

我们可以使用 filterKeys()filterValues() 方法过滤掉条目。

我们还可以使用 filter() 方法过滤掉匹配键/值的元素

.

示例

fun main() {
    val theMap = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    var resultMap = theMap.filterValues{ it > 2}
    println(resultMap)
    
    resultMap = theMap.filterKeys{ it == "two"}
    println(resultMap)
    
    resultMap = theMap.filter{ it.key == "two" || it.value == 4}
    println(resultMap)
    
}

运行上述 Kotlin 程序时,将生成以下输出

{three=3, four=4}
{two=2}
{two=2, four=4}

映射地图元素

我们可以使用 map() 方法使用提供的函数映射所有元素:。

示例

fun main() {
     val theMap = mapOf("one" to 1, "two" to 2, "three" to 3)
    val resultMap = theMap.map{ (k, v) -> "Key is $k, Value is $v" }
    
    println(resultMap)
}

运行上述 Kotlin 程序时,将生成以下输出

[Key is one, Value is 1, Key is two, Value is 2, Key is three, Value is 3]

Kotlin 可变地图

我们可以使用 mutableMapOf() 创建可变集合,稍后我们可以使用 put 在同一地图中添加更多元素,并且可以使用 remove() 方法从集合中删除元素。

示例

fun main() {
     val theMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
    
    theMap.put("four", 4)
    println(theMap)
    
    theMap["five"] = 5
    println(theMap)
    
    theMap.remove("two")
    println(theMap)
    
}

运行上述 Kotlin 程序时,将生成以下输出

{one=1, two=2, three=3, four=4}
{one=1, two=2, three=3, four=4, five=5}
{one=1, three=3, four=4, five=5}

测验时间 (面试和考试准备)

Q 1 - 我们可以将可变的 Kotlin 地图设为不可变的吗?

A - 是的

B - 否

答案:A

解释

是的,我们可以通过将可变集合转换为 Map 来使其不可变

Q 2 - 我们可以添加两个或多个地图并使用 + 运算符创建一个单一集合

A - 正确

B - 错误

答案:A

解释

是的,我们可以添加或减去两个 Kotlin 地图并生成第三个集合。加号就像集合的 union()

Q 2 - 哪个方法将返回 Kotlin Map 给定键的值?

A - get()

B - elementAt()

C - 使用集合变量的直接索引

D - 以上都不是

答案:A

解释

get() 方法用于获取与键对应的值。

广告