Метод ring.Ring.Link
Метод Link соединяет кольцевой список, на котором он был вызван, с другим кольцевым списком, переданным в качестве аргумента. Он возвращает указатель на новый элемент, который следует за исходным элементом после объединения. Первым параметром метод принимает указатель на кольцевой список r, который будет присоединен к текущему списку. В результате операции оба списка объединяются в один кольцевой список.
Синтаксис
func (r *Ring) Link(s *Ring) *Ring
Пример
Давайте создадим два кольцевых списка и соединим их:
package 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)
})
}
Результат выполнения кода:
0
1
2
3
4
5
Пример
Давайте соединим два кольца, но начнем обход с другого элемента:
package 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)
})
}
Результат выполнения кода:
1
2
0
3
4
5
Пример
Давайте соединим кольцо с самим собой, чтобы создать новое кольцо из части элементов:
package 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)
})
}
Результат выполнения кода:
2
3
4
0
1
2
3
4
0
1
Смотрите также
-
метод
ring.Ring.Unlink,
который удаляет указанное количество элементов из кольцевого списка -
метод
ring.Ring.Next,
который возвращает следующий элемент кольцевого списка -
метод
ring.Ring.Prev,
который возвращает предыдущий элемент кольцевого списка -
метод
ring.Ring.Do,
который применяет функцию ко всем элементам кольцевого списка