我试图创建一个通用函数,该函数应该计算作为参数传递的切片,而不管其类型如何。我有几个不同类型的切片,但不知道如何正确执行:
func SliceToChunks(arr []any, indices ...int) [][]any {
collection := make([][]any, len(arr))
n1 := indices[0]
...
n6 := indices[5]
collection = append(collection, arr[n1:n2])
collection = append(collection, arr[n3:n4])
collection = append(collection, arr[n5:n6])
return collection
}
sliceA := []TypeA{1, 2, .. , 50}
sliceB := []TypeB{1, 2, .. , 50}
chunksA := SliceToChunks(sliceA, 5, 15)
// result should be:
//
// chunksA = [][]TypeA{
// sliceA[ 0: 5], 5 pcs
// sliceA[ 5:20], 15 pcs
// sliceA[20:35], 15 pcs
// sliceA[35:50], 15 pcs
// }
chunksB := SliceToChunks(sliceB, 20, 25)
// result should be:
//
// chunksB = [][]TypeB{
// sliceB[ 0:20], 20 pcs
// sliceB[20:45], 25 pcs
// sliceB[45:50], 5 pcs (residue)
// }
字符串
我将感激你的忠告。
2条答案
按热度按时间z3yyvxxp1#
不确定这是否是最好的方法,因为我不完全理解你想做什么,但给予这个看看。
字符串
因为你已经用长度(n)初始化了
collection
,所以你不必使用append,你可以直接访问索引。此外,循环遍历范围以获得更简洁的代码。
最后,使用Go语言的generics。我不鼓励使用
T any
,你应该使用union类型或者像comparable
这样的类型,因为使用any
就违背了拥有一个类型系统的目的。1tu0hz3e2#
我相信你可以使用interface{}泛型类型来实现这一点:
字符串