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

在 Go 中使用切片进行子集检查

在 Go 中使用切片进行子集检查

Go
白衣非少年 2021-06-15 05:16:06
我正在寻找一种有效的方法来检查一个切片是否是另一个切片的子集。我可以简单地遍历它们进行检查,但我觉得必须有更好的方法。例如{1, 2, 3} 是 {1, 2, 3, 4}的子集 {1, 2, 2} 不是 {1, 2, 3, 4} 的子集有效地做到这一点的最佳方法是什么?谢谢!
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

如果您的切片已排序,则可以完成这项工作。


package main


import "fmt"


// Subset return whether a is a sublist of b. Both a and b must be (weakly) ascending.

func Subset(a, b []int) bool {

    for len(a) > 0 {

        switch {

        case len(b) == 0:

            return false

        case a[0] == b[0]:

            a = a[1:]

            b = b[1:]

        case a[0] < b[0]:

            return false

        case a[0] > b[0]:

            b = b[1:]

        }

    }

    return true

}


func main() {

    cases := []struct {

        a, b []int

        want bool

    }{

        {[]int{1, 2, 3}, []int{1, 2, 3, 4}, true},

        {[]int{1, 2, 2}, []int{1, 2, 3, 4}, false},

    }

    for _, c := range cases {

        if Subset(c.a, c.b) != c.want {

            fmt.Printf("Subset(%v, %v) = %v, want %v\n", c.a, c.b, Subset(c.a, c.b), c.want)

        }

    }

}


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 315 浏览
慕课专栏
更多

添加回答

举报

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