функции коллекции

This commit is contained in:
badkaktus 2019-10-08 22:30:12 +03:00
parent 26bd47a251
commit 4690c15e21
2 changed files with 32 additions and 32 deletions

View File

@ -41,7 +41,7 @@ WaitGroups
Сортировка через функции (Sorting by Functions) Сортировка через функции (Sorting by Functions)
Panic Panic
Defer Defer
Collection Functions Функции коллекции (Collection Functions)
String Functions String Functions
String Formatting String Formatting
Regular Expressions Regular Expressions

View File

@ -1,20 +1,21 @@
// We often need our programs to perform operations on // Нам часто нужны наши программы для выполнения операций
// collections of data, like selecting all items that // с коллекциями данных, таких как выбор всех элементов,
// satisfy a given predicate or mapping all items to a new // которые удовлетворяют данному предикату, или отображение
// collection with a custom function. // всех элементов в новую коллекцию с помощью
// пользовательской функции.
// In some languages it's idiomatic to use [generic](http://en.wikipedia.org/wiki/Generic_programming) // В некоторых языках идиоматично использовать [дженерики](http://en.wikipedia.org/wiki/Generic_programming)
// data structures and algorithms. Go does not support // и алгоритмы. Go не поддерживает дженерики; в Go, как
// generics; in Go it's common to provide collection // правило, предоставляют функции коллекции если они
// functions if and when they are specifically needed for // необходимы конкретно для вашей программы и ваших
// your program and data types. // типов данных.
// Here are some example collection functions for slices // Вот несколько примеров функций коллекции для срезов
// of `strings`. You can use these examples to build your // со `строковыми значениями`. Вы можете использовать эти
// own functions. Note that in some cases it may be // примеры, чтобы сделать собственные функции. Обратите
// clearest to just inline the collection-manipulating // внимание, что в некоторых случаях, возможно, было бы
// code directly, instead of creating and calling a // более явным встроить код, манипулирующий коллекциями,
// helper function. // вместо создания создания вспомогательных функций.
package main package main
@ -23,8 +24,8 @@ import (
"strings" "strings"
) )
// Index returns the first index of the target string `t`, or // Возвращает первый индекс совпадения со строкой `t` или -1
// -1 if no match is found. // если совпадение не найдено.
func Index(vs []string, t string) int { func Index(vs []string, t string) int {
for i, v := range vs { for i, v := range vs {
if v == t { if v == t {
@ -34,14 +35,13 @@ func Index(vs []string, t string) int {
return -1 return -1
} }
// Include returns `true` if the target string t is in the // Возвращает `true` если строка `t` находится в срезе.
// slice.
func Include(vs []string, t string) bool { func Include(vs []string, t string) bool {
return Index(vs, t) >= 0 return Index(vs, t) >= 0
} }
// Any returns `true` if one of the strings in the slice // Возвращает `true` если одна из строк в срезе
// satisfies the predicate `f`. // удовлетворяет условию `f`.
func Any(vs []string, f func(string) bool) bool { func Any(vs []string, f func(string) bool) bool {
for _, v := range vs { for _, v := range vs {
if f(v) { if f(v) {
@ -51,8 +51,8 @@ func Any(vs []string, f func(string) bool) bool {
return false return false
} }
// All returns `true` if all of the strings in the slice // Возвращает `true` если все из строк в срезе
// satisfy the predicate `f`. // удовлетворяют условие `f`.
func All(vs []string, f func(string) bool) bool { func All(vs []string, f func(string) bool) bool {
for _, v := range vs { for _, v := range vs {
if !f(v) { if !f(v) {
@ -62,8 +62,8 @@ func All(vs []string, f func(string) bool) bool {
return true return true
} }
// Filter returns a new slice containing all strings in the // Возвращает новый срез, содержащий все строки в срезе,
// slice that satisfy the predicate `f`. // которые удовлетворяют условие `f`.
func Filter(vs []string, f func(string) bool) []string { func Filter(vs []string, f func(string) bool) []string {
vsf := make([]string, 0) vsf := make([]string, 0)
for _, v := range vs { for _, v := range vs {
@ -74,8 +74,8 @@ func Filter(vs []string, f func(string) bool) []string {
return vsf return vsf
} }
// Map returns a new slice containing the results of applying // Возвращает новый срез, содержащий результаты выполнения
// the function `f` to each string in the original slice. // функции `f` с каждой строкой исходного слайса.
func Map(vs []string, f func(string) string) []string { func Map(vs []string, f func(string) string) []string {
vsm := make([]string, len(vs)) vsm := make([]string, len(vs))
for i, v := range vs { for i, v := range vs {
@ -86,7 +86,7 @@ func Map(vs []string, f func(string) string) []string {
func main() { func main() {
// Here we try out our various collection functions. // Здесь мы пробуем различные функции коллекций.
var strs = []string{"peach", "apple", "pear", "plum"} var strs = []string{"peach", "apple", "pear", "plum"}
fmt.Println(Index(strs, "pear")) fmt.Println(Index(strs, "pear"))
@ -105,9 +105,9 @@ func main() {
return strings.Contains(v, "e") return strings.Contains(v, "e")
})) }))
// The above examples all used anonymous functions, // Все примеры, приведенные выше, использовали
// but you can also use named functions of the correct // анонимные функции, но вы можете использовать именные
// type. // функции корректного типа.
fmt.Println(Map(strs, strings.ToUpper)) fmt.Println(Map(strs, strings.ToUpper))
} }