英文:
Can you delete keys from a map in Golang using a variable that contains the name of the key instead of the key in quotations?
问题
这是我的代码:
package main
import "fmt"
var map1 = make(map[string]string)
func main() {
deleteItem()
}
func deleteItem() {
fmt.Println("输入要删除的键:")
var key2 string
fmt.Scanln(&key2)
fmt.Println(map1)
for index := range map1 {
if index == key2 {
delete(map1, index)
fmt.Println(map1)
}
}
}
这是错误信息:
go:95:9: 调用 delete 时参数过多
已有 (map[string]string, string)
需要 ()
我试图创建一个地图,程序可以根据用户输入删除项目,但似乎无法将变量作为参数传递给 delete() 函数。有没有办法解决这个问题?
英文:
This is my code:
package main
import "fmt"
var map1 = make(map[string]string)
func main() {
delete()
}
func delete() {
fmt.Println("Enter key to be deleted: ")
var key2 string
fmt.Scanln(&key2)
fmt.Println(map1)
for index, element := range map1 {
if index == key2 {
delete(map1, index)
fmt.Println(map1)
}
}
}
This is the error message
go:95:9: too many arguments in call to delete
have (map[string]string, string)
want ()
I'm trying to create a map where the program can delete items upon user input but it doesn't seem like I can pass a variable as an argument to the delete() function.
Is there any way to get around this?
答案1
得分: 3
你将函数命名为delete
,因此在函数内部,你遮蔽了内置的delete()
函数,并且使用它将引用你的delete()
函数。请将其重命名。
另外请注意,为了实现你想要的效果,你不需要使用循环,只需使用delete(map1, key2)
:
func remove() {
fmt.Println("Enter key to be deleted: ")
var key2 string
fmt.Scanln(&key2)
fmt.Println(map1)
delete(map1, key2)
fmt.Println(map1)
}
英文:
You named your function delete
, so inside it you shadow the builtin delete()
function, and using it will refer to your delete()
function. Rename it.
Also note that to achieve what you want, you don't need a loop, just use delete(map1, key2)
:
func remove() {
fmt.Println("Enter key to be deleted: ")
var key2 string
fmt.Scanln(&key2)
fmt.Println(map1)
delete(map1, key2)
fmt.Println(map1)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论