如何将切片中的所有内容添加到一个字符串中

问题描述 投票:0回答:1

大家好,我正在编写关于创建地图的代码,在该地图上我们有两件事:书名和书号,如果书名看起来像“哈利·波特”,我就陷入一件事,只有我的代码添加哈利和我想在我的切片中添加 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:] 
但这不起作用,这是我的问题

string go slice
1个回答
0
投票

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)
}

注意:生成的字符串可能与您的输入不完全匹配(例如,多个空格会丢失),但这对于您的用例来说可能并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.