Golang如何从切片输出不带括号的结果

Golang如何从切片输出不带括号的结果

package main
/*
输入姓名:
Herman Budi Jenny Kevin Aris

期望输出:
Herman Budi Aris

实际得到:
Herman Budi Aris []
*/

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

func evenNames(slice []string) []string {
	for i := 0; i < len(slice); i++ {
		if len(slice[i])%2 == 0 {
			fmt.Print(slice[i], " ")
		}
	}
	return []string{}
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	x := scanner.Text()
	slice := strings.Split(x, " ")
	names := evenNames(slice)
	fmt.Println(names)
}

更多关于Golang如何从切片输出不带括号的结果的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复
package main

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

func evenNames(slice []string) []any {
	var list []any
	for i := 0; i < len(slice); i++ {
		if len(slice[i])%2 == 0 {
			list = append(list, slice[i])
		}
	}

	return list
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	x := scanner.Text()

	slice := strings.Split(x, " ")
	names := evenNames(slice)
	fmt.Println(names...)
}

更多关于Golang如何从切片输出不带括号的结果的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


evenNames函数中,你直接打印了符合条件的名字,但最后又返回了一个空切片[]string{},导致主函数中打印了空切片[]。要解决这个问题,你有两种选择:

方案一:修改函数返回实际筛选的结果

func evenNames(slice []string) []string {
    var result []string
    for i := 0; i < len(slice); i++ {
        if len(slice[i])%2 == 0 {
            result = append(result, slice[i])
        }
    }
    return result
}

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Scan()
    x := scanner.Text()
    slice := strings.Split(x, " ")
    names := evenNames(slice)
    
    // 手动输出不带括号的结果
    for i, name := range names {
        if i > 0 {
            fmt.Print(" ")
        }
        fmt.Print(name)
    }
    fmt.Println()
}

方案二:直接在函数中输出并返回nil(如果不需要返回值)

func evenNames(slice []string) []string {
    for i := 0; i < len(slice); i++ {
        if len(slice[i])%2 == 0 {
            fmt.Print(slice[i], " ")
        }
    }
    return nil
}

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Scan()
    x := scanner.Text()
    slice := strings.Split(x, " ")
    names := evenNames(slice)
    if names != nil {
        fmt.Println(names)
    }
}

更简洁的方案:使用strings.Join

func evenNames(slice []string) []string {
    var result []string
    for _, name := range slice {
        if len(name)%2 == 0 {
            result = append(result, name)
        }
    }
    return result
}

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Scan()
    x := scanner.Text()
    slice := strings.Split(x, " ")
    names := evenNames(slice)
    
    // 使用strings.Join连接字符串
    fmt.Println(strings.Join(names, " "))
}

推荐使用第三种方案,它既保持了函数的纯粹性(只负责筛选数据),又通过strings.Join实现了无括号的输出格式。

回到顶部