Golangで構造体データとインターフェースデータを比較するにはどうすればよいですか?

bmacrevolution:

Golangで汎用バイナリツリーを作成しようとしています。インターフェイスのデータとコードの入力データを比較するにはどうすればよいですか?これが私がやろうとしていることの例です。私を困らせている比較はこれです

 } else if cur.data < data {

-

package DSAA

type TreeNode struct {
    data interface{}
    right *TreeNode
    left *TreeNode
}

type BinarySearchTree struct {
    root *TreeNode
}

func BSTCreate() *BinarySearchTree {
    return &BinarySearchTree{nil}
}

func (b *BinarySearchTree) Insert(cur TreeNode, data interface{}) *BinarySearchTree {
    if &cur == nil {
        cur := &TreeNode{data, nil, nil}
    } else if cur.data < data {
        b = b.Insert(*cur.left, data)
    } else {
        b = b.Insert(*cur.right, data)
    }
    return b
}
user6169399:

いくつかのオプションがあります:
1-ランタイムタイプスイッチの使用:

package main

import (
    "fmt"
)

func main() {
    fmt.Println(Less(1, 2))       // true
    fmt.Println(Less("AB", "AC")) // true
}

func Less(a, b interface{}) bool {
    switch v := a.(type) {
    case int:
        w := b.(int)
        return v < w
    case string:
        w := b.(string)
        return v < w

    }
    return false
}

その後、交換する} else if cur.data < data {} else if Less(cur.data , data) {


2-使用Comparer interface

package main

import (
    "fmt"
)

type Comparer interface {
    // Less reports whether the element  is less than b
    Less(b interface{}) bool
}

func main() {
    a, b := Int(1), Int(2)
    fmt.Println(a.Less(b)) // true

    c, d := St("A"), St("B")
    fmt.Println(c.Less(d)) // true
}

type Int int

func (t Int) Less(b interface{}) bool {
    if v, ok := b.(Int); ok {
        return int(t) < int(v)
    }
    return false
}

type St string

func (t St) Less(b interface{}) bool {
    if v, ok := b.(St); ok {
        return string(t) < string(v)
    }
    return false
}

3-使用 reflect

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

このJavaインターフェースと継承構造をGolangに変換するにはどうすればよいですか?

分類Dev

インターフェイススライスで構造体変数の値を設定するにはどうすればよいですか?

分類Dev

構造体配列から1つのデータ行を削除するにはどうすればよいですか?(インデックス付き)

分類Dev

インターフェイス{}を特定の構造体として関数に渡すにはどうすればよいですか?

分類Dev

不明なインターフェイスで構造体の値を取得するにはどうすればよいですか{}

分類Dev

Racketでコンパイル時の構造体メタデータを提供しながら構造体コンストラクターをオーバーライドするにはどうすればよいですか?

分類Dev

構造体でRc <RefCell <T >>のデータ型を使用するにはどうすればよいですか?

分類Dev

インターフェイスを使用してさまざまな構造体を正規化するにはどうすればよいですか?

分類Dev

データフレームスキーマの文字列を各構造体に分割するにはどうすればよいですか?

分類Dev

pysparkデータフレームのネストされた構造体に列を追加するにはどうすればよいですか?

分類Dev

ドメインとサブドメインに適切なデータベース構造を作成するにはどうすればよいですか?

分類Dev

構造体へのポインタを持つ構造体フィールドを取得するにはどうすればよいですか?

分類Dev

別の.cファイルで前方宣言された構造体データを使用するにはどうすればよいですか?

分類Dev

マップ内のキーと同じデータを持つGolangの2つのカスタム構造体タイプを区別するにはどうすればよいですか?

分類Dev

Goでデータ構造を含む構造体のサイズを取得するにはどうすればよいですか?

分類Dev

EclipseIDEでsqliteデータベース構造を確認するにはどうすればよいですか?

分類Dev

mexファイルのMatlab構造体配列のデータにアクセスするにはどうすればよいですか

分類Dev

インスタンス化のために構造体のフィールドに制約を追加するにはどうすればよいですか?

分類Dev

ファイル内のデータを読み取り、構造体のベクトルを作成するにはどうすればよいですか?

分類Dev

構造体メンバーにデータを読み書きする関数を作成するにはどうすればよいですか?

分類Dev

JavaのListインターフェースとはどのようなデータ構造ですか?

分類Dev

リフレクトを使用して、構造体フィールドのタイプがインターフェースかどうかを確認するにはどうすればよいですか?

分類Dev

構造体オブジェクトがスコープ外になったときに構造体オブジェクト内のポインターを削除するにはどうすればよいですか?

分類Dev

bachInsertでデータをフィールドと比較するにはどうすればよいですか?

分類Dev

複数のオブジェクトリターンでjson構造体をフォーマットするにはどうすればよいですか?(動的)

分類Dev

Spark Structured Streamingで静的データフレームをストリーミングフレームと比較するにはどうすればよいですか?

分類Dev

従来のCAPIを呼び出すときに、最新のC ++で構造体へのポインターを他の構造体へのポインターに正しくキャストするにはどうすればよいですか?

分類Dev

Sparkデータフレームの構造体列を動的に選択するにはどうすればよいですか?

分類Dev

ソートのカスタマイズに合うようにデータ構造を設計するにはどうすればよいですか?

Related 関連記事

  1. 1

    このJavaインターフェースと継承構造をGolangに変換するにはどうすればよいですか?

  2. 2

    インターフェイススライスで構造体変数の値を設定するにはどうすればよいですか?

  3. 3

    構造体配列から1つのデータ行を削除するにはどうすればよいですか?(インデックス付き)

  4. 4

    インターフェイス{}を特定の構造体として関数に渡すにはどうすればよいですか?

  5. 5

    不明なインターフェイスで構造体の値を取得するにはどうすればよいですか{}

  6. 6

    Racketでコンパイル時の構造体メタデータを提供しながら構造体コンストラクターをオーバーライドするにはどうすればよいですか?

  7. 7

    構造体でRc <RefCell <T >>のデータ型を使用するにはどうすればよいですか?

  8. 8

    インターフェイスを使用してさまざまな構造体を正規化するにはどうすればよいですか?

  9. 9

    データフレームスキーマの文字列を各構造体に分割するにはどうすればよいですか?

  10. 10

    pysparkデータフレームのネストされた構造体に列を追加するにはどうすればよいですか?

  11. 11

    ドメインとサブドメインに適切なデータベース構造を作成するにはどうすればよいですか?

  12. 12

    構造体へのポインタを持つ構造体フィールドを取得するにはどうすればよいですか?

  13. 13

    別の.cファイルで前方宣言された構造体データを使用するにはどうすればよいですか?

  14. 14

    マップ内のキーと同じデータを持つGolangの2つのカスタム構造体タイプを区別するにはどうすればよいですか?

  15. 15

    Goでデータ構造を含む構造体のサイズを取得するにはどうすればよいですか?

  16. 16

    EclipseIDEでsqliteデータベース構造を確認するにはどうすればよいですか?

  17. 17

    mexファイルのMatlab構造体配列のデータにアクセスするにはどうすればよいですか

  18. 18

    インスタンス化のために構造体のフィールドに制約を追加するにはどうすればよいですか?

  19. 19

    ファイル内のデータを読み取り、構造体のベクトルを作成するにはどうすればよいですか?

  20. 20

    構造体メンバーにデータを読み書きする関数を作成するにはどうすればよいですか?

  21. 21

    JavaのListインターフェースとはどのようなデータ構造ですか?

  22. 22

    リフレクトを使用して、構造体フィールドのタイプがインターフェースかどうかを確認するにはどうすればよいですか?

  23. 23

    構造体オブジェクトがスコープ外になったときに構造体オブジェクト内のポインターを削除するにはどうすればよいですか?

  24. 24

    bachInsertでデータをフィールドと比較するにはどうすればよいですか?

  25. 25

    複数のオブジェクトリターンでjson構造体をフォーマットするにはどうすればよいですか?(動的)

  26. 26

    Spark Structured Streamingで静的データフレームをストリーミングフレームと比較するにはどうすればよいですか?

  27. 27

    従来のCAPIを呼び出すときに、最新のC ++で構造体へのポインターを他の構造体へのポインターに正しくキャストするにはどうすればよいですか?

  28. 28

    Sparkデータフレームの構造体列を動的に選択するにはどうすればよいですか?

  29. 29

    ソートのカスタマイズに合うようにデータ構造を設計するにはどうすればよいですか?

ホットタグ

アーカイブ