Golang 的 列表 元素的移动有两种情景,分别为:将 指定元素移动到另一元素的前面 和将指定元素移动到另一元素的后面 。
如果将指定元素移动到另一元素的后面中的指定元素本来就在另一元素的后面,那么列表不会做任何的改动,或者如果指定元素不是列表中的元素,列表也不会做任何改动。
MoveAfter(e, mark *Element)
参数 | 描述 |
---|---|
e | 要移动的元素。 |
mark | 移动元素的基准元素。 |
将元素 e 移动到元素 mark 的后面。
将元素 e 移动到元素 mark 的后面
package main
import (
"container/list"
"fmt"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
//将元素 e 移动到元素 mark 的后面
listHaiCoder := list.New()
listHaiCoder.PushFront("Hello")
element1 := listHaiCoder.PushFront("HaiCoder")
element2 := listHaiCoder.PushFront("嗨客网")
for i := listHaiCoder.Back(); i != nil; i = i.Prev() {
fmt.Printf("%s ", i.Value)
}
fmt.Println("\n=====================================")
listHaiCoder.MoveAfter(element2, element1)
for i := listHaiCoder.Back(); i != nil; i = i.Prev() {
fmt.Printf("%s ", i.Value)
}
}
程序运行后,控制台输出如下:
我们通过 list.New 创建了一个列表 listHaiCoder,接着使用 PushFront 函数在列表的头部连续插入了三个元素。因为我们使用的是头插法,因此最后插入的元素在最前面。
接着,我们首先 遍历列表 一次,打印出此时列表元素的顺序,接着,使用 MoveAfter 将元素 element2 移动到元素 element1 的后面。
最后,我们再次打印此时列表元素的顺序,发现元素 element2 已经移动到了 element1 元素的后面。
如果元素本来就在后面,列表不做任何改变
package main
import (
"container/list"
"fmt"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
//如果元素本来就在后面,列表不做任何改变
listHaiCoder := list.New()
listHaiCoder.PushFront("Hello")
element1 := listHaiCoder.PushFront("HaiCoder")
element2 := listHaiCoder.PushFront("嗨客网")
for i := listHaiCoder.Back(); i != nil; i = i.Prev() {
fmt.Printf("%s ", i.Value)
}
fmt.Println("\n=====================================")
listHaiCoder.MoveAfter(element1, element2)
for i := listHaiCoder.Back(); i != nil; i = i.Prev() {
fmt.Printf("%s ", i.Value)
}
}
程序运行后,控制台输出如下:
我们通过 list.New 创建了一个列表 listHaiCoder,接着使用 PushFront 函数在列表的头部连续插入了三个元素。因为我们使用的是头插法,因此最后插入的元素在最前面。
接着,我们首先遍历列表一次,打印出此时列表元素的顺序,接着,使用 MoveAfter 将元素 element1 移动到元素 element2 的后面。
因为元素 element1 本来就在元素 element2 的后面,所以列表没有做任何的改变。最后,我们再次打印此时列表元素的顺序。
如果元素不是列表的元素,列表不做任何改变
package main
import (
"container/list"
"fmt"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
//如果元素不是列表的元素,列表不做任何改变
listHaiCoder := list.New()
listHaiCoder.PushFront("Hello")
element := listHaiCoder.PushFront("嗨客网")
listHaiCoder2 := list.New()
element1 := listHaiCoder2.PushFront("Hai")
for i := listHaiCoder.Back(); i != nil; i = i.Prev() {
fmt.Printf("%s ", i.Value)
}
fmt.Println("\n=====================================")
listHaiCoder.MoveAfter(element, element1)
for i := listHaiCoder.Back(); i != nil; i = i.Prev() {
fmt.Printf("%s ", i.Value)
}
}
程序运行后,控制台输出如下:
我们通过 list.New 创建了一个列表 listHaiCoder 和一个列表 listHaiCoder2,接着使用 PushFront 函数分别在两个列表的头部插入元素。
接着,我们将列表 listHaiCoder2 的元素 element1 插入到列表 listHaiCoder 中,此时列表 listHaiCoder 不会做任何的改变,程序也不会报错。
如果将指定元素移动到另一元素的后面中的指定元素本来就在另一元素的后面,那么列表不会做任何的改动,或者如果指定元素不是列表中的元素,列表也不会做任何改动。移到元素后语法:
MoveAfter(e, mark *Element)