如何递归地将字符串连接到golang中string类型的数组

如何递归地将字符串连接到golang中string类型的数组,go,Go,我为此挣扎了很长一段时间。我基本上想要创建一个递归地将字符串连接到数组的函数 像这样: 加入“,”[“一”,“二”,“三”] 应该是“一,二,三” 像这样的 package main import ( "fmt" "strings" ) func flatJoin(sep string, args ...interface{}) string { values := make([]string, 0) for _, item := range args {

我为此挣扎了很长一段时间。我基本上想要创建一个递归地将字符串连接到数组的函数

像这样:

加入“,”[“一”,“二”,“三”] 应该是“一,二,三”

像这样的

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

这只支持一个级别的平坦化,但是您可以根据您的期望定制switch语句上的递归

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

这只支持一个级别的展平,但您可以根据需要自定义switch语句的递归。

strings模块中已有函数。但它不是递归的,如果需要递归,可以这样做:

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"}))
}
字符串
模块中已经有函数。但它不是递归的,如果需要递归,可以这样做:

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"}))
}
你是说像?你是说像?