РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
943 of 1593 menu

Метод ring.Ring.Do

Метод ring.Ring.Do выполняет итерацию по всем элементам кольцевого списка (кольца) и применяет к каждому из них переданную функцию. В качестве параметра метод принимает функцию с сигнатурой func(interface{}), которая будет вызвана для значения каждого элемента. Обход начинается с текущего элемента и продолжается до возвращения к нему, охватывая таким образом все элементы кольца.

Синтаксис

r.Do(func(v interface{}) { // обработка значения v })

Пример

Давайте создадим кольцо из трех элементов и выведем значения каждого из них с помощью ring.Ring.Do:

package main import ( "container/ring" "fmt" ) func main() { r := ring.New(3) for i := 0; i < r.Len(); i++ { r.Value = i + 1 r = r.Next() } r.Do(func(v interface{}) { fmt.Println(v) }) }

Результат выполнения кода:

1 2 3

Пример

Рассмотрим пример, в котором мы собираем значения элементов кольца в слайс с помощью ring.Ring.Do:

package main import ( "container/ring" "fmt" ) func main() { r := ring.New(4) values := []string{"a", "b", "c", "d"} for i := 0; i < r.Len(); i++ { r.Value = values[i] r = r.Next() } var res []string r.Do(func(v interface{}) { res = append(res, v.(string)) }) fmt.Println(res) }

Результат выполнения кода:

[a b c d]

Пример

А теперь применим функцию, которая изменяет значения элементов кольца на лету:

package main import ( "container/ring" "fmt" ) func main() { r := ring.New(3) for i := 0; i < r.Len(); i++ { r.Value = i * 10 r = r.Next() } r.Do(func(v interface{}) { val := v.(int) fmt.Println(val + 5) }) }

Результат выполнения кода:

5 15 25

Смотрите также

  • тип ring.Ring,
    представляющий узел кольцевого списка
  • метод ring.Ring.Next,
    который возвращает следующий элемент кольца
  • метод ring.Ring.Len,
    который возвращает количество элементов в кольце
  • метод ring.Ring.Link,
    который связывает два кольцевых списка
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить