以下のコードは、nameTable
という新しいマップを作成し、exampleという名前のエントリを追加してから、Valueのnameプロパティを出力しようとしています。
実行したとき、プラス操作は思ったほどマップに新しいエントリを追加しなかったようです。
だから私は何を間違っているのですか?
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)
}
}
作業中に、マップにエントリを追加、削除、取得する方法の例をいくつか紹介します。
混乱の理由は、plus
がnot変化演算子であるためです。つまり、(読み取り専用)Map
で動作しますが、インスタンス自体は変更されません。これは署名です:
operator fun <K, V> Map<out K, V>.plus(pair: Pair<K, V>): Map<K, V>
必要なのは、set
で定義されている変異演算子MutableMap
です:
operator fun <K, V> MutableMap<K, V>.set(key: K, value: V)
そのため、コードが書き直される可能性があります(いくつかの追加の機能強化があります)。
class Person(var name: String, var lastName: String, var age: Int)
val nameTable = mutableMapOf<String, Person>()
val example = Person("Josh", "Cohen", 24)
fun main (args: Array<String>) {
nameTable["person1"] = example
for((key, value) in nameTable){
println(value.age)
}
}
Map
のplus-methodは、新しいエントリを含む新しいマップを作成します。元のマップは変更されません。このメソッドを使用する場合は、これを行う必要があります。
fun main(args: Array<String>) {
val table = nameTable.plus(Pair("person1", example))
for (entry in table) {
println(entry.value.age)
}
}
元のマップにエントリを追加する場合は、Javaのようにput
メソッドを使用する必要があります。
これはうまくいくでしょう:
fun main(args: Array<String>) {
nameTable.put("person1", example)
for (entry in nameTable) {
println(entry.value.age)
}
}
MutableMap
からエントリを取得および削除するには、これを使用できます。
nameTable["person1"] // Syntactic sugar for nameTable.get("person1")
nameTable.remove("person1")
面倒です。次のように値を直接割り当てることができます。
@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"
}
}
使用する必要があります
プット
方法。
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)
}
}