Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| // 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 |