ホームページ  >  記事  >  バックエンド開発  >  Go で汎用比較演算子を実装するにはどうすればよいですか?

Go で汎用比較演算子を実装するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 02:01:01266ブラウズ

How Can I Implement a Generic Comparison Operator in Go?

比較可能なインターフェイスは何と呼ばれますか?

Go には、汎用の比較演算子 (<) を提供する事前定義されたインターフェイスはありません。代わりに、型を比較す​​る独自の Less 関数を定義できます。 Less 関数は、同じ型の 2 つの引数を受け取り、最初の引数が 2 番目の引数より小さいかどうかを示すブール値を返します。

整数と文字列を比較できる Less 関数の例を次に示します。

func Less(a, b interface{}) bool {
    switch a.(type) {
    case int:
        if ai, ok := a.(int); ok {
            if bi, ok := b.(int); ok {
                return ai < bi
            }
        }
    case string:
        if ai, ok := a.(string); ok {
            if bi, ok := b.(string); ok {
                return ai < bi
            }
        }
    // ...
    default:
        panic("Unknown")
    }
    return false
}

Less 関数を使用して、並べ替えられたリンク リストに要素を挿入できます:

func Insert(val interface{}, l *list.List) *list.Element {
    e := l.Front()
    if e == nil {
        return l.PushFront(val)
    }
    for ; e != nil; e = e.Next() {
        if Less(val, e.Value) {
            return l.InsertBefore(val, e)
        }
    }
    return l.PushBack(val)
}

これInsert 関数は、Less 関数に基づいてソートされた順序でリンクされたリストを維持します。

以上がGo で汎用比較演算子を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。