mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-09-12 22:52:05 +00:00
good good study, day day up!
This commit is contained in:
60
vendor/gopl.io/ch4/rev/main.go
generated
vendored
Normal file
60
vendor/gopl.io/ch4/rev/main.go
generated
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
// Copyright © 2016 Alan A. A. Donovan & Brian W. Kernighan.
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
|
||||
// See page 86.
|
||||
|
||||
// Rev reverses a slice.
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
//!+array
|
||||
a := [...]int{0, 1, 2, 3, 4, 5}
|
||||
reverse(a[:])
|
||||
fmt.Println(a) // "[5 4 3 2 1 0]"
|
||||
//!-array
|
||||
|
||||
//!+slice
|
||||
s := []int{0, 1, 2, 3, 4, 5}
|
||||
// Rotate s left by two positions.
|
||||
reverse(s[:2])
|
||||
reverse(s[2:])
|
||||
reverse(s)
|
||||
fmt.Println(s) // "[2 3 4 5 0 1]"
|
||||
//!-slice
|
||||
|
||||
// Interactive test of reverse.
|
||||
input := bufio.NewScanner(os.Stdin)
|
||||
outer:
|
||||
for input.Scan() {
|
||||
var ints []int
|
||||
for _, s := range strings.Fields(input.Text()) {
|
||||
x, err := strconv.ParseInt(s, 10, 64)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
continue outer
|
||||
}
|
||||
ints = append(ints, int(x))
|
||||
}
|
||||
reverse(ints)
|
||||
fmt.Printf("%v\n", ints)
|
||||
}
|
||||
// NOTE: ignoring potential errors from input.Err()
|
||||
}
|
||||
|
||||
//!+rev
|
||||
// reverse reverses a slice of ints in place.
|
||||
func reverse(s []int) {
|
||||
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
|
||||
s[i], s[j] = s[j], s[i]
|
||||
}
|
||||
}
|
||||
|
||||
//!-rev
|
Reference in New Issue
Block a user