大家好,我正在编写关于创建地图的代码,在该地图上我们有两件事:书名和书号,如果书名看起来像“哈利·波特”,我就陷入一件事,只有我的代码添加哈利和我想在我的切片中添加 Harry 之后的所有内容,但是 golang 给出错误并说你不能将切片添加到地图,只能添加一个字符串内容,我不知道如何修复它
这是我的代码
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
//how much data you want add and delete
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
num, _ := strconv.Atoi(scanner.Text())
mymap := make(map[int]string)
for i := 0; i < num; i++ {
scanner.Scan()
info := strings.Fields(scanner.Text())
//if he want to add datas
if info[0] == "ADD" {
var z, _ = strconv.Atoi(info[1])
mymap[z] = info[2]
//if he want remove datas
} else if info[0] == "REMOVE" {
x := info[1]
var z, _ = strconv.Atoi(x)
delete(mymap, z)
}
}
fmt.Println(mymap)
}
所以我愿意
mymap[z] = info[2:]
但这不起作用,这是我的问题
info
将是 []string
例如{"ADD", "1", "Harry", "Potter"}
并且您想要将 info[2:]
转换为 string
(即“哈利·波特”),其中元素之间用空格分隔(部分反转 strings.Fields
)。 strings.Join
可能是最简单的方法(playground):
func main() {
testInput := []string{ // simulate input
"ADD 1 Harry Potter",
"ADD 1 Harry Potter",
"ADD 1 Lord of the rings",
"REMOVE 2 Harry Potter",
}
mymap := make(map[int]string)
for _, command := range testInput {
info := strings.Fields(command)
//if he want to add datas
if info[0] == "ADD" {
var z, _ = strconv.Atoi(info[1])
mymap[z] = strings.Join(info[2:], " ")
//if he want remove datas
} else if info[0] == "REMOVE" {
x := info[1]
var z, _ = strconv.Atoi(x)
delete(mymap, z)
}
}
fmt.Println(mymap)
}
注意:生成的字符串可能与您的输入不完全匹配(例如,多个空格会丢失),但这对于您的用例来说可能并不重要。