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实现了无括号的输出格式。

