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 サイトの他の関連記事を参照してください。

fatestinggocodewithinit functions、useexplicitsetupfunctionsurseSorseparatet fileStoavoidepencyonInitonitisideEffects.1)useexplicitsetupfuncontrollglobalbariaveInitialization.2)createSeparateSteSteSteStobypassInit funtedtententen

Go'serrorhandlingReturnserrorsasasvalues、javaandpython whichuseexceptions.1)go'smethodensuresexpliciterror handling

効果的なインターフェイスリングミニマル、クリア、およびプロモテスルーシューリング。1)インターフェイスForfforfibilityOfimplementation.2)interfacesforact forabstractiontoswapimplementations withingingcallingcode.3)設計の快適性を発信すること

集中型エラー処理は、GO言語でのコードの読みやすさと保守性を向上させることができます。その実装方法と利点には、次のものが含まれます。1。ビジネスロジックからロジックを個別に処理し、コードを簡素化します。 2。中央の取り扱いによるエラー処理の一貫性を確保します。 3. DeferとRecoverを使用してパニックをキャプチャおよび処理して、プログラムの堅牢性を高めます。

Ingo、AlternativestoinititionCustomInitializationAndSingletons.1)CustomInitializationAltionsionAlowoveroveroveroveroveroveroveroveroveroveroveroveroveroveroveroverover curs、beantefordedorcontionalsetups.2)singletonsensureone-initializatializatializatialent

gohandlesinterfacesandtypeassertionseffectivivivivivity、強化された柔軟性と耐毒性を強化します

言語エラー処理は、エラーとエラーを介してより柔軟になり、読みやすくなります。 1.エラーは、エラーが指定されたエラーと同じであり、エラーチェーンの処理に適しているかどうかを確認するために使用されます。 2.エラー。エラータイプを確認するだけでなく、エラーを特定のタイプに変換することもできます。これは、エラー情報を抽出するのに便利です。これらの関数を使用すると、エラー処理ロジックを簡素化できますが、エラーチェーンの正しい配信に注意を払い、コードの複雑さを防ぐために過度の依存性を回避できます。

tomakegogoapplicationsRunfasterAndMore -efficient、useprofilingtools、leverageconconcurrency、andmanagememoryefcectively.1)useprofforcpuandmemoryprofilingtoidentififybottlenecks.2)


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









