comparable: The Equality Constraint
comparable: tenglik cheklovi
Go'da o'rnatilgan yana bir maxsus cheklov bor: `comparable`. U == va != bilan solishtirish mumkin bo'lgan barcha turlarga mos keladi — sonlar, satrlar, bool, va (Composite Types kursida ko'rganingizdek) map kaliti bo'la oladigan boshqa turlar.
comparablening eng katta foydasi — uni map kaliti sifatida ishlatish mumkinligi, chunki map kaliti bo'lish uchun tur solishtirish imkoniga ega bo'lishi shart:
func Unique[T comparable](items []T) []T {
seen := make(map[T]bool)
result := []T{}
for _, item := range items {
if !seen[item] {
seen[item] = true
result = append(result, item)
}
}
return result
}Bu — Count Everything darsidagi map[string]int bilan sanash andazasining generic versiyasi, faqat endi kalit turi stringga qattiq bog'lanmagan — comparablega mos keladigan har qanday tur (int, string, hatto struct'lar) bilan ishlaydi.
>_ Exercise
Unique[T comparable](items []T) []T funksiyasini yozing. U items ichidan takrorlanmagan elementlarni, birinchi uchragan tartibda, yangi slice'da qaytaradi. map[T]bool yordamida qaysi qiymatlar allaqachon ko'rilganini kuzating.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
comparable — ==/!= bilan solishtirish mumkin bo'lgan turlar uchun o'rnatilgan cheklov, va bu ularni map kaliti sifatida ishlatish imkonini beradi. Unique kabi funksiyalar comparable tufayli istalgan mos keladigan tur bilan qayta ishlatiladigan bo'ladi.
NEXT UP
Generic Structs: Type Parameters on Data
$ go run main.go
Kodingizni ishga tushiring