2 回答

TA貢獻1828條經驗 獲得超6個贊
您可以像往常一樣將值轉換為參數類型。
從提案類型轉換:
在具有兩個類型參數
From
和的函數中,如果From 約束的類型集中的所有類型都可以轉換為 To 約束的類型集中的所有類型,則 type 的值可以轉換為 type 的值To
。From
To
在這種情況下,您實際上并沒有 aFrom
因為它是切片索引int
;目標類型將是T
(即使這可能不是您想要的,請參閱下面的原因)。當然int
可以轉換為T
' 類型集,因為它僅包括數字類型(盡管在or 的情況下會截斷或丟失精度int8
!float64
)
indexs = append(indexs, T(i))
但是您的程序將索引切片聲明為[]T
,這意味著將您的通用函數實例化為:
is := FindIndexValue([]float64{1,5,7,9}, float64(9))
將產生類型的結果[]float64
。由于返回的值是切片索引,總是int
,這沒有多大意義。
最好簡單地返回[]int
:
func FindIndexValue[T Number](array []T, value T) []int {
var indices []int
for i := range array {
// match on the generically typed slice item
if array[i] == value {
// store slice indices as ints
indices = append(indexs, i)
}
}
return indices
}
游樂場:https ://gotipplay.golang.org/p/EykXppG2qJa

TA貢獻1799條經驗 獲得超6個贊
int無論切片的元素類型如何,索引始終是整數類型 ( )。所以結果類型應該是[]int.
你為什么要這樣[]T?如果T是uint8并且傳遞的切片包含超過 256 個元素,您甚至無法返回正確的索引。
func FindIndexValue[T types.Number](array []T, value T) []int {
var indices []int
for i, v := range array {
if v == value {
indices = append(indices, i)
}
}
return indices
}
- 2 回答
- 0 關注
- 134 瀏覽
添加回答
舉報