我已被分配创建一组API,用于检查成员资格,交集,并集,差额和补语的以下方面:
{7, 9, 13}
的有限集{-inf, ..., inf}
{5, 6, 7, ... }
我已经提供了以下UML作为Java实现示例。
我最近选择了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.gotype RangeSet struct {
lowerBoundary, upperBoundary float64
}
... the 15 set operation functions
infinite_set.gotype InfiniteSet struct { }
... the 15 set operation functions
我想知道是否有人可以给一些暗示,而不是笨拙的战略?我不希望任何代码作为答案(但是我也不反对)。
最佳答案
您是否考虑过使用接口。这将减少冗长的代码。
关于go - 不同类型集的集合操作的实现策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63970393/