大佬教程收集整理的这篇文章主要介绍了如何使用数据类 Kotlin 在 Map 中添加用户,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我想在地图中添加用户,然后检查它是否已添加到那里。 例如,用户输入他们的信息,我将他们的电子邮件保存为键,将数据类中的信息保存为值
private val users = mutableMapOf<String,User>()
private fun add(){
check()
val email = binding.email.text.toString()
val firstname = binding.firstname.text.toString()
val lastname = binding.lastname.text.toString()
val age = binding.age.text.toString()
users["default"] = User("email","firstname","lastname","age")
for (user in users.keys){
if (email == user) {
Toast.makeText(this,"not successful",Toast.LENGTH_SHORT).show()
break
}else{
users[email] = User(email,firstname,lastname,agE)
Toast.makeText(this,"successful",Toast.LENGTH_SHORT).show()
}
}
}
但是当我第一次点击按钮时,它只是说成功,但是在第二次点击时它应该返回不成功,因为这个用户已经创建,但它显示了两个祝酒词。
你能告诉我为什么会这样吗,我该如何解决?
这与 for
循环不能保证它会按照您期望的顺序迭代键的事实有关。
例如,考虑这张地图:
users["default"] = User("email","firstName","lastName","age")
users["zzz@xyz.com"] = User("email","zz","z","age")
假设键将按字母顺序迭代(大多数情况下实际上并非如此)并且您有email=zzz@xyz.com
在第一次迭代中,user
字符串将引用 default
。由于 email == user
为假,它会转到循环的 else
分支。然后,在下一次迭代中,user
将为 zzz@xyz.com
,email == user
将为真;只是发送两次“toast”通知。
您似乎试图插入不存在的元素,或者如果存在则显示错误。考虑使用 for
检查前一个键是否存在,然后在必要时添加新元素,而不是 containsKey
循环。
// In kotlin,you can create a map with initial values by using the "to" infix function
private val users = mutableMapOf<String,User>(
"default" to User("email","age")
)
private fun add() {
check()
val email = binding.email.text.toString()
val firstName = binding.firstname.text.toString()
val lastName = binding.lastname.text.toString()
val age = binding.age.text.toString()
if (users.containsKey(email)) {
Toast.makeText(this,"not successful",Toast.LENGTH_SHORT).show()
return
}
users[email] = User(email,firstName,lastName,agE)
Toast.makeText(this,"successful",Toast.LENGTH_SHORT).show()
}
,
这是因为您将映射键与电子邮件值进行比较。您需要比较电子邮件的价值。尝试在 for: email == user.value.email
.
以上是大佬教程为你收集整理的如何使用数据类 Kotlin 在 Map 中添加用户全部内容,希望文章能够帮你解决如何使用数据类 Kotlin 在 Map 中添加用户所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。