1 回答
TA贡献1804条经验 获得超3个赞
定义一个接口:
type Keyer interface {
Key() int // or whatever type the Key field has
}
然后在两种类型上实现接口:
func (r RequestObject) Key() int {
return r.Key
}
func (r ResponseObject) Key() int {
return r.Key
}
并重写您的函数以采用此接口(而不是使用匈牙利符号和无休止的变量名):
func mergeKeyers(dst *[]Keyer, src []Keyer) {
for _, s := range src {
f := -1
for i, d := range *dst {
if s.Key() == d.Key() {
f = i
break
}
}
if f == -1 {
*dst = append(*dst, s)
}
}
}
另外,请考虑 Dave C 的评论:
你有一个 O(n×m) 算法,你可以使用 O(n+m) 算法。
我会让你以这种方式优化你的代码。
编辑以解决您的第二个问题:
类型*[]RequestObject和*[]Keyer是不同的,不可互换。您需要做的是将 RequestObjects 切片转换为 Keyers 切片。
这就像[]RequestObject在 type 值中迭代每个条目并将其分配给新条目一样简单[]Keyer。
另请参阅这些答案:
在 go 中类型转换接口切片
在不同类型的切片之间转换
- 1 回答
- 0 关注
- 149 浏览
添加回答
举报