gpt4 book ai didi

arrays - 组合公共(public)前缀子串

转载 作者:数据小太阳 更新时间:2023-10-29 03:44:28 25 4
gpt4 key购买 nike

我有一个消息流进入 Go channel ,其中大部分看起来像:

T:添加包到图表:acl-devel/2.2.52_4/armv6l-musl
T:将包添加到图中:rofs-filtered/1.7_1/x86_64-musl
T:将包添加到图中:rofs-filtered/1.7_1/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
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:将包添加到图形:python-argh/0.26.2_1/noarch
T:将包添加到图表:tzutils/2017c_1/HOST

我希望能够有效地逐行组合上述字符串,但不丢失任何信息。这是为了打印到 IRC channel ,所以我不想触发洪水警告。为此,我想将上面的内容按摩成类似于下面的内容:

T: 添加包到图表: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:将包添加到图形:python-argh/0.26.2_1/noarch

虽然仍然有很多输出和消息,但报告的大部分内容大约为 10-12 行,带有上述公共(public)前缀,散布在执行上述操作的多个线程的输出中(因此上述数据中的重复次数很少,很多线程和数据是大约 2 秒的快照)。

我如何在 Go 中压缩多行以沿着它们的公共(public)前缀连接?

最佳答案

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

https://play.golang.org/p/XodCgl1fa5

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

关于arrays - 组合公共(public)前缀子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47406468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com