go - 不同类型集的集合操作的实现策略

标签 go set operation

我已被分配创建一组API,用于检查成员资格,交集,并集,差额和补语的以下方面:

  • {7, 9, 13}的有限集
  • 无限集,例如{-inf, ..., inf}
  • 范围集,例如{5, 6, 7, ... }

  • 我已经提供了以下UML作为Java实现示例。
    UML
    我最近选择了Go,并认为我会用它进行作业。
    我在查看UML时有一些值得注意的注解,显然Go尚未正式支持泛型,因此我与我的老师将其清除,他对我很好,只使用数字作为设置元素即可。
    我的困难在于从实现该解决方案的Java方法中抽象出来,我想知道是否有比当前使用的策略少的繁重的解决方案。
    目前,我已经创建了三个Go文件作为具有操作集的文件集-有限集set.go,范围集range_set.go和无限集infinite_set.go。我会针对每种文件类型中的15种函数(每个文件集有15个函数)对每个集合类型(范围集合,无限集合和有限集合)的每种操作组合(成员资格,交集,并集,差和补集)处理每种可能的操作,从技术上讲这不是问题,但我绝对怀疑我是在做错事还是效率很低。以及操作返回的每个可能集合的集合类型(比较混乱)。
    set.go
    type Set struct {
        container map[int]bool
    }
    
    func (s Set) getMemberShipFromInfinteSet(set InfiniteSet) MembershipSet {
        //logic
    }
    
    func (s Set) getIntersectionFromInfiniteSet(set InfiniteSet) IntersectionSet {
        //logic
    }
    ... 3 more value receiver methods for respectively union, difference and complement
    
    func (s Set) getMemberShipFromRangeSet(set RangeSet) MembershipSet {
        //logic
    }
    
    func (s Set) getIntersectionFromRangeSet(set RangeSet) IntersectionSet {
        //logic
    }
    ... 3 more value receiver methods for respectively union, difference and complement
    func (s Set) getMemberShipFromSet(set Set) MembershipSet {
        //logic
    }
    
    func (s Set) getIntersectionFromSet(set Set) IntersectionSet {
        //logic
    }
    ... 3 more value receiver methods for respectively union, difference and complement
    
    
    range_set.go
    type RangeSet struct {
        lowerBoundary, upperBoundary float64
    }
    ... the 15 set operation functions 
    
    
    infinite_set.go
    type InfiniteSet struct { }
    ... the 15 set operation functions 
    
    我想知道是否有人可以给一些暗示,而不是笨拙的战略?
    我不希望任何代码作为答案(但是我也不反对)。

    最佳答案

    您是否考虑过使用接口。这将减少冗长的代码。

    关于go - 不同类型集的集合操作的实现策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63970393/

    相关文章:

    go - golang regexp.matchString 有什么问题吗?

    c++ - 如何直接从输入流中向集合中插入值?

    R - 如何对多个变量执行相同的操作

    c++ - 比较是原子操作吗?

    ip - Loopback 从操作钩子(Hook)中获取 IP 地址

    multithreading - 工作池模式 - 死锁

    json - Golang json解码失败解码接口(interface){}

    go - 是否可以通过关闭 src 来中断 io.Copy?

    asp.net - 将集和可选参数传递给存储过程T-SQL-ASP.NET

    c++ - 在 C++ 中将 lower_bound() 与一组对象一起使用