我正在开发一个遗传算法库,我对每个基因的碱基使用泛型类型声明,即。type Gene[T comparable] struct { Bases: []T }
。这样做的原因是,不是每个问题都可以使用特定的数据类型来解决,例如float64
或uint8
,因此它被设计为灵活的最终用户用例。我遇到了一个测序方案的问题,其中基因被separator []T
分开:在空的最终基因的情况下,测序导致不应该存在的异常分隔符,这可能导致去测序以将其解析为单独的等位基因或仅包含分隔符的基因。有两种方法来处理它:第一种方法是忽略空的遗传结构,并在测序过程中排除它们,但这可能会删除有用的结构信息,例如:在模拟/优化期间保存包括遗传漂变的中间基因组的情况下;第二种方式是引入占位符序列来标识空结构。后者是我希望做的。
我希望通过翻转separator []T
中每个碱基的位,从分隔符自动生成这个占位符序列,并且我可以使用“reflect”包来检测使用的是哪种类型。但是,当函数返回签名是[]T
时,我不能返回[]int
。我可以做下面的事情,但我不确定这是否是一个好的做法。
func inverseSeparator[T comparable](separator []T) []T {
result := []T
switch reflect.TypeOf(separator[0]).Kind() {
case reflect.Int:
var v interface{}
for i := 0; i < len(separator); i++ {
// do the bit flip
v = resultOfBitFlip
result = append(result, v.(T))
}
// other cases
}
return result
}
字符串
将位翻转的结果转换回T
切片的最佳方法是什么,或者这是一种糟糕的方法?
1条答案
按热度按时间nmpmafwu1#
字符串