我正在努力解决这个问题很长一段时间。我基本上想要创建一个递归地将字符串连接到数组的函数。
像这样:
加入“,”[“一个”,“两个”,“三个”] 应该看起来像这样的“一,二,三”
答案 0 :(得分:3)
strings
模块中已有Join个功能。但它不是递归的,如果你需要递归,你可以这样做:
package main
import "fmt"
func join_helper(splitter string, arrOfStrings []string, res string) string {
if len(arrOfStrings) == 0 {
return res
}
if len(arrOfStrings) == 1 {
return join_helper(splitter, arrOfStrings[1:], res + arrOfStrings[0])
}
return join_helper(splitter, arrOfStrings[1:], res + arrOfStrings[0] + splitter)
}
func join(splitter string, arrOfStrings []string) string {
return join_helper(splitter, arrOfStrings, "")
}
func main(){
fmt.Println(join(",", []string{"a", "b", "c", "d"}))
}
答案 1 :(得分:2)
像这样的东西
package main
import (
"fmt"
"strings"
)
func flatJoin(sep string, args ...interface{}) string {
values := make([]string, 0)
for _, item := range args {
switch v := item.(type) {
case string:
values = append(values, v)
case []string:
values = append(values, v...)
case fmt.Stringer:
values = append(values, v.String())
default:
values = append(values, fmt.Sprintf("%v", v))
}
}
return strings.Join(values, sep)
}
func main() {
fmt.Println(flatJoin(", ", "basic", "other", []string{"here", "more", "inner"}))
}
http://play.golang.org/p/yY6YnZZAak
这仅支持一个展平级别,但您可以根据您的期望自定义switch语句的递归。