为了账号安全,请及时绑定邮箱和手机立即绑定

如何比较 Golang 中的结构数据和接口数据?

如何比较 Golang 中的结构数据和接口数据?

Go
尚方宝剑之说 2022-03-03 15:59:39
我正在尝试在 Golang 中创建一个通用的二叉树。如何比较来自接口的数据和代码中的输入数据?这是我正在尝试做的一个例子。给我带来麻烦的比较是这个 } else if cur.data < data {-package DSAAtype 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}
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

您有一些选择:

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


查看完整回答
反对 回复 2022-03-03
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信