Метод ring.Ring.Link

Метод Link соединяет кольцевой список, на котором он был вызван, с другим кольцевым списком, переданным в качестве аргумента. Он возвращает указатель на новый элемент, который следует за исходным элементом после объединения. Первым параметром метод принимает указатель на кольцевой список r, который будет присоединен к текущему списку. В результате операции оба списка объединяются в один кольцевой список.

Синтаксис

gofunc (r *Ring) Link(s *Ring) *Ring

Пример

Давайте создадим два кольцевых списка и соединим их:

gopackage main

import (
  "container/ring"
  "fmt"
)

func main() {
  r1 := ring.New(3)
  r2 := ring.New(3)

  for i := 0; i < r1.Len(); i++ {
    r1.Value = i
    r1 = r1.Next()
  }

  for i := 0; i < r2.Len(); i++ {
    r2.Value = i + 3
    r2 = r2.Next()
  }

  // Соединяем два кольца
  linked := r1.Link(r2)

  // Выводим элементы объединенного кольца
  linked.Do(func(x interface{}) {
    fmt.Println(x)
  })
}

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

go0
1
2
3
4
5

Пример

Давайте соединим два кольца, но начнем обход с другого элемента:

gopackage main

import (
  "container/ring"
  "fmt"
)

func main() {
  r1 := ring.New(3)
  r2 := ring.New(3)

  for i := 0; i < r1.Len(); i++ {
    r1.Value = i
    r1 = r1.Next()
  }

  for i := 0; i < r2.Len(); i++ {
    r2.Value = i + 3
    r2 = r2.Next()
  }

  // Перемещаемся на второй элемент первого кольца
  r1 = r1.Move(1)

  // Соединяем кольца
  linked := r1.Link(r2)

  // Выводим элементы объединенного кольца
  linked.Do(func(x interface{}) {
    fmt.Println(x)
  })
}

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

go1
2
0
3
4
5

Пример

Давайте соединим кольцо с самим собой, чтобы создать новое кольцо из части элементов:

gopackage main

import (
  "container/ring"
  "fmt"
)

func main() {
  r := ring.New(5)

  for i := 0; i < r.Len(); i++ {
    r.Value = i
    r = r.Next()
  }

  // Перемещаемся на третий элемент
  r = r.Move(2)

  // Соединяем кольцо с самим собой
  linked := r.Link(r)

  // Выводим элементы нового кольца
  linked.Do(func(x interface{}) {
    fmt.Println(x)
  })
}

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

go2
3
4
0
1
2
3
4
0
1

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

  • метод ring.Ring.Unlink,
    который удаляет указанное количество элементов из кольцевого списка
  • метод ring.Ring.Next,
    который возвращает следующий элемент кольцевого списка
  • метод ring.Ring.Prev,
    который возвращает предыдущий элемент кольцевого списка
  • метод ring.Ring.Do,
    который применяет функцию ко всем элементам кольцевого списка