Go 言語では、remove() 関数を使用してリスト要素を削除できます。構文は「list object.Remove(element)」です。parameter 要素は、リスト要素を削除することを示します。 element 要素を空にすることはできません。空でない場合は、削除された要素の値が返されます。空の場合は、例外が報告されます。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
go は、Python の list に似た list パッケージを提供します。このパッケージは、あらゆる種類のデータを格納でき、次のように対応する API を提供します。
type Element func (e *Element) Next() *Element func (e *Element) Prev() *Element type List func New() *List func (l *List) Back() *Element func (l *List) Front() *Element func (l *List) Init() *List func (l *List) InsertAfter(v interface{}, mark *Element) *Element func (l *List) InsertBefore(v interface{}, mark *Element) *Element func (l *List) Len() int func (l *List) MoveAfter(e, mark *Element) func (l *List) MoveBefore(e, mark *Element) func (l *List) MoveToBack(e *Element) func (l *List) MoveToFront(e *Element) func (l *List) PushBack(v interface{}) *Element func (l *List) PushBackList(other *List) func (l *List) PushFront(v interface{}) *Element func (l *List) PushFrontList(other *List) func (l *List) Remove(e *Element) interface{}
その中で、remove() 関数が使用されます。リストの場合 リストから要素を削除します。削除された要素を空にすることはできません。空の場合は、例外が報告されます。
Remove(e *Element) interface{}
パラメータ | 説明 |
---|---|
e | ##リスト要素を削除するには。
- 削除された要素の値を返します。
例 1:
package main import ( "container/list" "fmt" ) func main() { //使用 Remove 在列表中删除元素 listHaiCoder := list.New() listHaiCoder.PushFront("Hello") listHaiCoder.PushFront("HaiCoder") element := listHaiCoder.PushFront("Hello") removeEle := listHaiCoder.Remove(element) fmt.Println("RemoveElement =", removeEle) for i := listHaiCoder.Front(); i != nil; i = i.Next() { fmt.Println("Element =", i.Value) } }
分析:
- list.New を通じてリスト listHaiCoder を作成し、次に PushFront 関数を使用して 3 つの要素をリストに挿入し、次に Remove 関数を使用して最後に挿入された要素を削除しました。 。
- 最後に、削除された要素と削除されたリストを出力します。Remove 関数は、削除された要素の値を返します。同時に、最後に挿入された要素が正常に挿入されたことがわかります。リストから削除されました 削除されました。
- 例 2: 空の要素を削除する
package main import ( "container/list" "fmt" ) func main() { //使用 Remove 在列表中删除空元素,报错 listHaiCoder := list.New() listHaiCoder.PushFront("Hello") listHaiCoder.PushFront("HaiCoder") listHaiCoder.Remove(nil) }
プログラムを実行すると、コンソールの出力は次のようになります:
list パッケージが提供する API を使用すると、リストは確かに非常に便利ですが、使用中に注意しないと、見つけるのが難しいいくつかの落とし穴に遭遇し、その結果、プログラムの結果が期待どおりにならなくなります。ここでの落とし穴は、for ループを介してリストを走査し、すべての要素を削除するときに遭遇する問題です。たとえば、次のサンプル プログラムでは、リストを作成し、0 ~ 3 を順番に格納し、for ループを通じてリストを走査してすべての要素を削除します。
package main import ( "container/list" "fmt" ) func main() { l := list.New() l.PushBack(0) l.PushBack(1) l.PushBack(2) l.PushBack(3) fmt.Println("original list:") prtList(l) fmt.Println("deleted list:") for e := l.Front(); e != nil; e = e.Next() { l.Remove(e) } prtList(l) } func prtList(l *list.List) { for e := l.Front(); e != nil; e = e.Next() { fmt.Printf("%v ", e.Value) } fmt.Printf("n") }
プログラムを実行すると、出力は次のようになります。 ##
original list: 0 1 2 3 deleted list: 1 2 3From 出力を見ると、リスト内の要素が完全に削除されておらず、最初の要素 0 だけが削除されていることがわかりますが、これは当初の考えとは異なります。 、リストを走査してすべての要素を削除する書き方は次のようになります:
for e := l.Front(); e != nil; e = e.Next() { l.Remove(e) }しかし、上記のコード例の出力によれば、リストのすべての要素を削除することは無効です。問題? for ループのメカニズムから、最初の要素は削除されていますが、2 番目の要素は削除されていないため、2 番目のループの条件が無効であることがわかり、ループが終了します。次のステートメントを実行します:
l.Remove(e)e は nil である必要があるため、ループは終了します。 for ループ内の l.Remove(e) ステートメントの前に検証する print ステートメントを追加します。たとえば、次のステートメントを追加します:
fmt.Println("delete a element from list")プログラムの実行出力は次のとおりです:
original list: 0 1 2 3 deleted list: delete a element from list 1 2 3実際にループしているだけであることがわかります。一度ループすると、サイクルが終了します。つまり、ステートメント l.Remove(e) が実行された後、e は e.Next() と等しくなります。e.Next() が nil であるため、e は nil となり、ループは終了します。 e.Next() が nil なのはなぜですか? go list のソース コードを見ると、次のようになります。
// remove removes e from its list, decrements l.len, and returns e. func (l *List) remove(e *Element) *Element { e.prev.next = e.next e.next.prev = e.prev e.next = nil // avoid memory leaks e.prev = nil // avoid memory leaks e.list = nil l.len-- return e } // Remove removes e from l if e is an element of list l. // It returns the element value e.Value. func (l *List) Remove(e *Element) interface{} { if e.list == l { // if e.list == l, l must have been initialized when e was inserted // in l or l == nil (e is a zero Element) and l.remove will crash l.remove(e) } return e.Value }ソース コードから、 l.Remove(e) が実行されると、 l.remove(e) メソッドが呼び出されることがわかります。内部的に要素 e を削除します。メモリ リークを避けるために、e.next と e.prev には nil が割り当てられますが、これが問題の原因です。 修正手順は次のとおりです:
package main import ( "container/list" "fmt" ) func main() { l := list.New() l.PushBack(0) l.PushBack(1) l.PushBack(2) l.PushBack(3) fmt.Println("original list:") prtList(l) fmt.Println("deleted list:") var next *list.Element for e := l.Front(); e != nil; e = next { next = e.Next() l.Remove(e) } prtList(l) } func prtList(l *list.List) { for e := l.Front(); e != nil; e = e.Next() { fmt.Printf("%v ", e.Value) } fmt.Printf("n") }プログラムを実行した結果は次のとおりです:
original list: 0 1 2 3 deleted list:ご覧のとおり、リスト内のすべての要素が削除されています。正しく。 【関連する推奨事項:
Go ビデオ チュートリアル
、プログラミング教育 】
以上がGo言語でリストから要素を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

go语言叫go的原因:想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物,它的中文名叫做囊地鼠,它们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

是,TiDB采用go语言编写。TiDB是一个分布式NewSQL数据库;它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性。TiDB架构中的PD储存了集群的元信息,如key在哪个TiKV节点;PD还负责集群的负载均衡以及数据分片等。PD通过内嵌etcd来支持数据分布和容错;PD采用go语言编写。

go语言需要编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言,也就说Go语言程序在运行之前需要通过编译器生成二进制机器码(二进制的可执行文件),随后二进制文件才能在目标机器上运行。

go语言能编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言。对Go语言程序进行编译的命令有两种:1、“go build”命令,可以将Go语言程序代码编译成二进制的可执行文件,但该二进制文件需要手动运行;2、“go run”命令,会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件。

删除map元素的两种方法:1、使用delete()函数从map中删除指定键值对,语法“delete(map, 键名)”;2、重新创建一个新的map对象,可以清空map中的所有元素,语法“var mapname map[keytype]valuetype”。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版
便利なJavaScript開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ホットトピック



