次の golang のチュートリアル コラムでは、golang で 2 つのスライスが等しいかどうか、および値の下の配列が等しいかどうかを判断する方法を紹介します。それを必要としている友達の役に立つでしょう。助けてください!
golang では、==
によって 2 つの配列が等しいかどうかを簡単に判断できますが、残念ながらスライスは関連する演算子ではありません。 2 つのスライスが等しい場合、別のショートカットを見つけるしかありません。
スライスの等価性の定義
最も一般的な要件、つまり 2 つのスライスのタイプと長さが同じであり、その値が同じである場合を選択します。等しい添字も等しいです。例:
a := []int{1, 2, 3}b := []int{1, 2, 3}c := []int{1, 2}d := []int{1, 3, 2}
上記のコードでは、a
と b
は等しくなりますが、c
は長さが異なるため等しくありません。 a
,d
とは要素の順序が a
と異なるため等しくありません。
2 つの [] バイトが等しいかどうかを判断する
なぜ [] バイトを別々にリストする必要があるのでしょうか?
標準ライブラリは最適化された比較スキームを提供するため、車輪を再発明する必要はなくなりました。
package mainimport ( "bytes" "fmt")func main() { a := []byte{0, 1, 3, 2} b := []byte{0, 1, 3, 2} c := []byte{1, 1, 3, 2} fmt.Println(bytes.Equal(a, b)) fmt.Println(bytes.Equal(a, c))}
リフレクトを使用してスライス (配列) が等しいかどうかを判断します
タイプが []byte ではないスライスを判断する場合、reflect.DeepEqual
を使用することもできます。これは、2 つのオブジェクト (その中に含まれる要素も含む) が等しいかどうかを詳細に比較するために使用されます。
func DeepEqual(x, y interface{}) bool
DeepEqual は、x と y が次のように定義される「完全に等しい」かどうかを報告します。次のいずれかの場合に該当する場合、同一型の 2 つの値は完全に等しいと見なされます。深く等しいことはありません。同じ基礎となる配列の最初のエントリ (つまり、&x[0] == &y[0]) またはそれらの対応する要素 (長さまで) は完全に等しいことに注意してください。非 nil の空のスライスと nil スライス (たとえば、 , []byte{} と []byte( nil)) は完全に等価ではありません。
この文章の意味を理解するのは難しくありません。決定方法の原理と同じです。この記事の冒頭で説明したスライスの等価性ですが、ランタイムに少し「暗い魔法」を使用する点が異なります。
例を見てください:
package mainimport ( "fmt" "reflect")func main() { a := []int{1, 2, 3, 4} b := []int{1, 3, 2, 4} c := []int{1, 2, 3, 4} fmt.Println(reflect.DeepEqual(a, b)) fmt.Println(reflect.DeepEqual(a, c))}
手書きの判断Golang でリフレクトを使用すると、通常、パフォーマンスのコストがかかります。スライスの等価性判定を自分で実装するのはそれほど面倒ではありません:
func testEq(a, b []int) bool { // If one is nil, the other must also be nil. if (a == nil) != (b == nil) { return false; } if len(a) != len(b) { return false } for i := range a { if a[i] != b[i] { return false } } return true}
テストコード:
package main import "fmt" func main() { a := []int{1, 2, 3, 4} b := []int{1, 3, 2, 4} c := []int{1, 2, 3, 4} fmt.Println(testEq(a, b)) fmt.Println(testEq(a, c))}
以上がgolang で 2 つのスライスが等しいかどうかを判断するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

go'sfutureisbrightwithtrendslikeRikeRovedTooling、generics、cloud-nativeadoption、performulenhancements、andwebassemblyintegration、butchallengesincludemaintainingsimplicitandimplovingeror handling。

GoroutinesAreSareSareSareSormethodSthaturncurlyntingo、Enableing and LightweightConcurrency.1)theyRuntimeSimeSingMultiplexing、SountyStorunonFeweroSthReads.2)ゴルチンズを失ったことを許可します

initistoistoInitializevariables、setupconutupurations、orforformndexedarysetupbe foreThemainfunctionexecutes.useinitby:1)inginginyourcodeTorunautorunaintalunain、2)KeepingItshortandpocusedonsimpletasks、3)ConsididiriveSusinginsingingingingingingingingingingingingingingingingingingingingingingsingpltassksを使用すると、

go interfacesaremethodsignaturesetsetsattypesmustimplement、unableingpolymorphism withintinheritance forcleaner、modularcode.theyareimplictilistifisisfiestified、houseforfflexibleapisanddeaupling、busrecarefulusoavoidoidoimoidimeerrororsypertety。

Goで回復()関数を使用して、パニックから回復します。特定の方法は次のとおりです。1)回復()を使用して、延期関数でパニックをキャプチャして、プログラムのクラッシュを避けます。 2)デバッグの詳細なエラー情報を記録します。 3)特定の状況に基づいてプログラムの実行を再開するかどうかを決定します。 4)パフォーマンスに影響を及ぼさないように注意して使用します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ホットトピック









