Разберем несколько примеров программ на Го по срезам (slice).
Начнем.. Пользователь вводит два ряда чисел. Наша задача собрать их в одном срезе, удалив дубликаты. В качестве упражнения, будем использовать не карты, а обычные срезы.
Код:
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func getInput(r *bufio.Reader) []int { input, _ := r.ReadString('\n') input = strings.TrimSpace(input) str2slice := strings.Split(input, " ") var nums []int for _, v := range str2slice { num, _ := strconv.Atoi(v) nums = append(nums, num) } return nums } func main() { r := bufio.NewReader(os.Stdin) line1 := getInput(r) line2 := getInput(r) var dupl bool // duplicates flag for _, v := range line2 { dupl = false for _, y := range line1 { if v == y { dupl = true } } if !dupl { line1 = append(line1, v) } } fmt.Println(line1) }
Домашка: использовать не срезы, а карты (map) — будет проще и быстрее проверять дубликаты.
Пользователь вводит две строки — строку и фильтр. Задача исключить слова фильтра из первой строки. Пример вывода:
cat dog a b c fox
a god fox c
[cat dog b]
Код:
package main import ( "bufio" "fmt" "os" "strings" ) func getInput(r *bufio.Reader) []string { input, _ := r.ReadString('\n') input = strings.TrimSpace(input) str2slice := strings.Split(input, " ") return str2slice } func main() { r := bufio.NewReader(os.Stdin) line := getInput(r) filter := getInput(r) var exist bool var words []string for i := range line { exist = false for j := range filter { if line[i] == filter[j] { exist = true break } } if !exist { words = append(words, line[i]) } } fmt.Println(words) }
Найти самое длинное слово в предложении без помощи len()
package main import ( "bufio" "fmt" "os" "strings" ) func getInput(r *bufio.Reader) string { input, _ := r.ReadString('\n') return strings.ToLower(strings.TrimSpace(input)) } func main() { r := bufio.NewReader(os.Stdin) line := getInput(r) slice := strings.Split(line, " ") var max int var current int var word string for _, v := range slice { current = 0 for range v { current++ } if current > max { max = current word = v } } fmt.Println(word) }