如何在控制台上的新行上打印切片内容?

时间:2017-08-23 11:10:29

标签: go

有没有办法将切片的每个元素存储在新行上? 像这样的东西:

  

1

     

2

     

3

而不是

  

1   2   3

我只是不想在新行上打印这些元素,但希望将每个元素存储在不同的行

这是代码:

package main

import "fmt"

func main() {


slice := []int{1, 2, 3}
fmt.Println(slice)

}

由于

3 个答案:

答案 0 :(得分:2)

例如,

package main

import "fmt"

type VSlice []int

func (s VSlice) String() string {
    var str string
    for _, i := range s {
        str += fmt.Sprintf("%d\n", i)
    }
    return str
}

func main() {
    slice := []int{1, 2, 3}
    fmt.Print(VSlice(slice))
}

输出:

1
2
3

答案 1 :(得分:1)

您也可以使用var paths = []; var oldPolygon; function drawPoly(p1, p2) { paths.push([p1, p2]); console.log(paths); polygons = map.drawPolygon({ paths: paths, strokeColor: '#432070', strokeOpacity: 1, strokeWeight: 3, fillColor: '#432070', fillOpacity: 0.6 }); // remove old one if exists. if(oldPolygon != null){ map.removePolygon(oldPolygon); } // ... and save a reference to the new polygon for next time around. oldPolygon = polygons; }

strings.Join

答案 2 :(得分:0)

我对这两种方法中哪一种更快感兴趣 - 使用 for 循环打印切片,或加入切片然后打印结果,所以我测试了它。结果证明打印通常稍微快一点,尽管有时使用strings.Join会略有不同。

代码如下:

func printSlice(s[] string) {
    for _, el := range s {
        fmt.Println(el)
    }
}

func joinSlice(s[] string) {
    joinedSlice := strings.Join(s[:], "\n")
    fmt.Println(joinedSlice)
}

func main() {
    start := time.Now()
    printSlice(dirs)
    printTime := time.Since(start)

    start = time.Now()
    joinSlice(dirs)
    joinTime := time.Since(start)

    fmt.Printf("printSlice: %v \njoinSlice: %v \nprintSlice faster?: %v\n", printTime, joinTime, printTime < joinTime)
}

"dirs" 是一个包含文件列表的切片 - 在这种情况下超过 140 个文件。这是 10 个测试的执行时间(我不知道在 GoLang 中测试这个更优雅的方法,但如果有人知道,请随意。)

1
printSlice: 1.584753ms 
joinSlice: 39.132467ms 
printSlice faster?: true

2
printSlice: 1.195512ms 
joinSlice: 30.53137ms 
printSlice faster?: true

3
printSlice: 1.355297ms 
joinSlice: 80.888305ms 
printSlice faster?: true

4
printSlice: 1.347343ms 
joinSlice: 32.668568ms 
printSlice faster?: true

5
printSlice: 1.317251ms 
joinSlice: 31.575808ms 
printSlice faster?: true

6
printSlice: 1.038342ms 
joinSlice: 27.515216ms 
printSlice faster?: true

7
printSlice: 34.409332ms 
joinSlice: 8.32355ms 
printSlice faster?: false

8
printSlice: 1.20479ms 
joinSlice: 30.070951ms 
printSlice faster?: true

9
printSlice: 1.479724ms 
joinSlice: 34.551614ms 
printSlice faster?: true

10
printSlice: 977.179µs 
joinSlice: 442.46µs 
printSlice faster?: false

因此,在 10 次测试中的 8 次中,printSlice 更快。差异在一项测试中降至微秒,在另一项测试中降至毫秒。如果有人知道重复此测试的更好方法,请随时编辑或提出建议。