Maps 如何在Kotlin中使用地图

Maps 如何在Kotlin中使用地图,maps,kotlin,Maps,Kotlin,下面的代码正在创建一个名为nameTable的新映射,然后向其中添加一个名为example的条目,然后尝试打印该值的name属性 当我运行它时,plus操作似乎没有像我想象的那样向地图添加新条目 那么我做错了什么 class Person(name1: String, lastName1: String, age1: Int){ var name: String = name1 var lastName: String = lastName1 var age: Int =

下面的代码正在创建一个名为
nameTable
的新映射,然后向其中添加一个名为example的条目,然后尝试打印该值的name属性

当我运行它时,plus操作似乎没有像我想象的那样向地图添加新条目

那么我做错了什么

class Person(name1: String, lastName1: String, age1: Int){
    var name: String = name1
    var lastName: String = lastName1
    var age: Int = age1
}

var nameTable: MutableMap<String, Person> = mutableMapOf()
var example = Person("Josh", "Cohen", 24)

fun main (args: Array<String>){
    nameTable.plus(Pair("person1", example))
    for(entry in nameTable){
        println(entry.value.age)
    }
}
class-Person(name1:String,lastName1:String,age1:Int){
变量名称:String=name1
变量lastName:String=lastName1
变量年龄:Int=age1
}
变量nameTable:MutableMap=mutableMapOf()
变量示例=人(“乔希”、“科恩”,24)
趣味主线(args:Array){
nameTable.plus(成对(“person1”,示例))
for(名称表中的条目){
println(entry.value.age)
}
}

当我们在做这项工作时,我想了解一些如何添加、删除和从地图中获取条目的示例。

地图上的plus方法创建一个包含新条目的新地图。它不会改变原始贴图。如果要使用此方法,则需要执行以下操作:

fun main() {
    val table = nameTable.plus(Pair("person1", example))
    for (entry in table) {
        println(entry.value.age)
    }
}
如果要将条目添加到原始映射,需要使用Java中的
put
方法

这将有助于:

fun main() {
    nameTable.put("person1", example)
    for (entry in nameTable) {
        println(entry.value.age)
   }
} 
要从
MutableMap
中获取和删除条目,可以使用以下命令:

nameTable["person1"] // Syntactic sugar for nameTable.get("person1")
nameTable.remove("person1")

造成混淆的原因是,
plus
不是一个变异运算符,这意味着它在(只读)
Map
上工作,但不会更改实例本身。这是签名:

operator fun <K, V> Map<out K, V>.plus(pair: Pair<K, V>): Map<K, V>
因此,您的代码可能会被重写(带有一些额外的增强):

class-Person(变量名称:String,变量lastName:String,变量年龄:Int)
val nameTable=mutableMapOf()
val示例=人(“乔希”、“科恩”,24)
趣味主线(args:Array){
nameTable[“person1”]=示例
用于名称表中的((键,值){
println(value.age)
}
}
您必须使用

方法

class Person(name1:String, lastName1:String, age1:Int){
    var name:String = name1
    var lastName:String = lastName1
    var age:Int = age1
}
var nameTable:MutableMap<String, Person> = mutableMapOf()
var example = Person("Josh", "Cohen", 24)
fun main (args: Array<String>){
    nameTable.put("person1", example)
    for(entry in nameTable){
        println(entry.value.age)
    }
}
class-Person(name1:String,lastName1:String,age1:Int){
变量名称:String=name1
变量lastName:String=lastName1
变量年龄:Int=age1
}
变量nameTable:MutableMap=mutableMapOf()
变量示例=人(“乔希”、“科恩”,24)
趣味主线(args:Array){
nameTable.put(“person1”,示例)
for(名称表中的条目){
println(entry.value.age)
}
}

太麻烦了,您可以直接赋值,如下所示:

@Test
@Throws(Exception::class)
fun main(){

    val map:MutableMap<String,Person> = mutableMapOf()

    map["Josh"]= Person("Josh", "Cohen", 24)

    map.forEach { t, u ->
        println("map key:$t,map value:${u.toString()}")
    }
}

class Person(name1:String, lastName1:String, age1:Int){
    var name:String = name1
    var lastName:String = lastName1
    var age:Int = age1

    override fun toString(): String {
        return "name:$name,lastNam:$lastName,age:$age \n"
    }
}
@测试
@抛出(异常::类)
主要内容(){
val-map:MutableMap=mutableMapOf()
地图[“乔希”]=人(“乔希”,“科恩”,24)
map.forEach{t,u->
println(“映射键:$t,映射值:${u.toString()}”)
}
}
类人物(name1:String,lastName1:String,age1:Int){
变量名称:String=name1
变量lastName:String=lastName1
变量年龄:Int=age1
重写funtostring():String{
return“name:$name,lastNam:$lastName,age:$age\n”
}
}

顺便说一句,有人知道为什么Kotlin地图上没有
操作符fun-minus(key:K)
方法吗?在v1.1中添加了减号操作符
class Person(name1:String, lastName1:String, age1:Int){
    var name:String = name1
    var lastName:String = lastName1
    var age:Int = age1
}
var nameTable:MutableMap<String, Person> = mutableMapOf()
var example = Person("Josh", "Cohen", 24)
fun main (args: Array<String>){
    nameTable.put("person1", example)
    for(entry in nameTable){
        println(entry.value.age)
    }
}
@Test
@Throws(Exception::class)
fun main(){

    val map:MutableMap<String,Person> = mutableMapOf()

    map["Josh"]= Person("Josh", "Cohen", 24)

    map.forEach { t, u ->
        println("map key:$t,map value:${u.toString()}")
    }
}

class Person(name1:String, lastName1:String, age1:Int){
    var name:String = name1
    var lastName:String = lastName1
    var age:Int = age1

    override fun toString(): String {
        return "name:$name,lastNam:$lastName,age:$age \n"
    }
}