Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 组合公共前缀子字符串_Arrays_String_Go - Fatal编程技术网

Arrays 组合公共前缀子字符串

Arrays 组合公共前缀子字符串,arrays,string,go,Arrays,String,Go,我有一个进入围棋频道的消息流,其中大部分看起来像: T:将包添加到图形:acl-devel/2.2.52_4/armv6l-musl T:将包添加到图形:rofs过滤/1.7_1/x86_64-musl T:将包添加到图形:rofs筛选/1.7_1/主机 T:将包添加到图中:libshout/2.4.1_1/i686 T:在图中添加了组件:mate terminal/1.18.1_1/armv6l T:将包添加到图形:bullet-devel/2.86.1_1/x86_64-musl T:将包添

我有一个进入围棋频道的消息流,其中大部分看起来像:

T:将包添加到图形:acl-devel/2.2.52_4/armv6l-musl
T:将包添加到图形:rofs过滤/1.7_1/x86_64-musl
T:将包添加到图形:rofs筛选/1.7_1/主机
T:将包添加到图中:libshout/2.4.1_1/i686
T:在图中添加了组件:mate terminal/1.18.1_1/armv6l
T:将包添加到图形:bullet-devel/2.86.1_1/x86_64-musl
T:将包添加到图形:bullet-devel/2.86.1_1/HOST
T:在图表中添加了程序包:cubietruck uboot/2016.11_1/armv6l-musl
T:已将包添加到图形:libfontenc/1.1.3_1/i686-musl
T:将包添加到图形:apk tools/2.8.1_1/x86_64
T:将包添加到图形:virtualbox ose/5.1.28_1/armv7l-musl
T:将包添加到图形:acl-devel/2.2.52_4/armv7l
T:已将包添加到图形:apk tools/2.8.1_1/x86_64-musl
T:将包添加到图形:tzutils/2017c_1/x86_64-musl
T:将包添加到graph:python argh/0.26.2_1/noarch
T:将包添加到图中:tzutils/2017c_1/HOST

我希望能够有效地一行一行地组合上述字符串,但不会丢失任何信息。这是为了打印到IRC通道,所以我不想触发洪水警告。要做到这一点,我想按摩上述内容,使其与以下内容类似:

T:将包添加到graph:rofs-filtered/1.7_1/{x86_64-musl,HOST}
T:将包添加到图中:libshout/2.4.1_1/i686
T:在图中添加了组件:mate terminal/1.18.1_1/armv6l
T:在图中添加了包:bullet-devel/2.86.1_1/{x86_64-musl,HOST}
T:在图表中添加了程序包:cubietruck uboot/2016.11_1/armv6l-musl
T:已将包添加到图形:libfontenc/1.1.3_1/i686-musl
T:在图形中添加了包:apk tools/2.8.1_1/{x86_64,x86_64-musl}
T:将包添加到图形:virtualbox ose/5.1.28_1/armv7l-musl
T:将包添加到图形中:acl-devel/2.2.52_4/{armv6l-musl,armv7l}
T:将包添加到图形:tzutils/2017c_1/{x86_64-musl,HOST}
T:将包添加到graph:python argh/0.26.2_1/noarch

虽然仍然有大量的输出和消息,但报告的大部分大约是10-12行,带有如上所述的公共前缀,中间穿插着执行上述操作的多个线程的输出(因此,上述数据中重复的数量很少,线程很多,数据是大约2秒的快照)


我如何压缩多行代码,以便在Go中沿着它们的公共前缀连接?

这里有一个可能的解决方案。如果需要,可以在append()命令之前检查重复项


到目前为止,你尝试了什么?为什么你的尝试不起作用?到目前为止,我还没有尝试过。我正在寻找最好的方法,我现在写的任何东西都是猜测。就我所知,我只是不知道谷歌用什么术语来形容这个问题,还有一个标准的库函数正等着解决我的问题。
package main

import (
    "bufio"
    "fmt"
    "strings"
)

func main() {
    input := `T: added package to graph: acl-devel/2.2.52_4/armv6l-musl
T: added package to graph: rofs-filtered/1.7_1/x86_64-musl
T: added package to graph: rofs-filtered/1.7_1/HOST
T: added package to graph: libshout/2.4.1_1/i686
T: added package to graph: mate-terminal/1.18.1_1/armv6l
T: added package to graph: bullet-devel/2.86.1_1/x86_64-musl
T: added package to graph: bullet-devel/2.86.1_1/HOST
T: added package to graph: cubietruck-uboot/2016.11_1/armv6l-musl`

    m := make(map[string][]string)
    s := bufio.NewScanner(strings.NewReader(input))
    for s.Scan() {
        t := s.Text()
        i := strings.LastIndex(t, "/")
        p := t[:i+1]
        last := t[i+1 : len(t)]
        m[p] = append(m[p], last)
    }
    for k, v := range m {
        fmt.Print(k, "{", strings.Join(v, ","), "}", "\n")
    }
}