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

Метод ring.Ring.Unlink

Метод ring.Ring.Unlink удаляет из кольцевого списка определенное количество элементов, начиная со следующего за текущим элемента. В качестве аргумента метод принимает количество удаляемых элементов типа int. Метод возвращает новый кольцевой список *ring.Ring, содержащий удаленные элементы. Если удаление невозможно (например, указано нулевое или отрицательное количество), метод возвращает nil. Важно: сам текущий элемент остается в исходном списке.

Синтаксис

unlinkedRing := ring.Unlink(n)

Пример

Создадим кольцевой список из пяти элементов и удалим из него два элемента, следующих за текущим:

package main import ( "container/ring" "fmt" ) func main() { r := ring.New(5) for i := 0; i < r.Len(); i++ { r.Value = i + 1 r = r.Next() } // Перемещаемся на элемент со значением 1 for r.Value != 1 { r = r.Next() } // Удаляем 2 элемента после текущего unlinked := r.Unlink(2) // Выводим оставшийся список r.Do(func(v interface{}) { fmt.Println(v) }) }

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

1 4 5

Как видно из примера, после удаления элементов со значениями 2 и 3, в исходном кольцевом списке остались элементы 1, 4 и 5.

Пример

Давайте проверим, что возвращает метод Unlink. Удалим два элемента и выведем полученный список:

package main import ( "container/ring" "fmt" ) func main() { r := ring.New(5) for i := 0; i < r.Len(); i++ { r.Value = i + 1 r = r.Next() } // Перемещаемся на элемент со значением 1 for r.Value != 1 { r = r.Next() } // Удаляем 2 элемента после текущего unlinked := r.Unlink(2) // Выводим удаленные элементы unlinked.Do(func(v interface{}) { fmt.Println(v) }) }

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

2 3

Метод вернул новый кольцевой список, содержащий удаленные элементы. Обратите внимание, что порядок элементов сохраняется.

Пример

Рассмотрим поведение метода при попытке удалить нулевое количество элементов:

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() } // Пытаемся удалить 0 элементов unlinked := r.Unlink(0) if unlinked == nil { fmt.Println("unlinked is nil") } else { fmt.Println("unlinked is not nil") } }

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

"unlinked is nil"

При передаче нулевого или отрицательного значения метод возвращает nil, так как удаление не производится.

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

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