Özel Sıralama Düzenleri
Karşılaştırma işlevleri tanımlayın
Özel Sıralama Düzenleri, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Varsayılan Sıralamanın Ötesi
Varsayılan sıralama artan düzendedir. Ancak gerçek veriler özel kurallar gerektirir: uzunluğa, birden çok alana veya hesaplanan bir değere göre sıralama yapabilirsiniz.
Karşılaştırma işlevi, istediğiniz her kuralı ifade ettiğiniz yerdir.
Küçük Olma İşlevi
sort.Slice için bir karşılaştırma işlevinin imzası func(i, j int) bool şeklindedir. i öğesi j öğesinden önce geliyorsa true döndürür.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{4, 1, 3}
less := func(i, j int) bool { return nums[i] < nums[j] }
sort.Slice(nums, less)
fmt.Println(nums)
}Dize Uzunluğuna Göre Sıralama
Alfabetik sıralama yerine, uzunluğa göre sıralamak için her dizenin len() değerlerini karşılaştırın.
package main
import (
"fmt"
"sort"
)
func main() {
words := []string{"pear", "fig", "banana"}
sort.Slice(words, func(i, j int) bool {
return len(words[i]) < len(words[j])
})
fmt.Println(words)
}Yapıları Alana Göre Sıralama
Karşılaştırma için herhangi bir yapı alanını seçebilirsiniz. Burada ürünleri fiyata göre sıralıyoruz.
package main
import (
"fmt"
"sort"
)
type Product struct {
Name string
Price int
}
func main() {
items := []Product{{"Pen", 3}, {"Book", 12}, {"Cup", 7}}
sort.Slice(items, func(i, j int) bool {
return items[i].Price < items[j].Price
})
fmt.Println(items)
}Çok Alanlı Sıralama
Eşitlikleri çözmek için ilk alan eşitse ikinci bir alanı karşılaştırın. Önce yaşa, ardından ada göre sıralayın.
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
p := []Person{{"Zoe", 30}, {"Ann", 30}, {"Bob", 25}}
sort.Slice(p, func(i, j int) bool {
if p[i].Age != p[j].Age {
return p[i].Age < p[j].Age
}
return p[i].Name < p[j].Name
})
fmt.Println(p)
}sort.Reverse ile Tersine Çevirme
sort.Reverse, sırasını tersine çevirmek için bir sort.Interface'i sarar. sort.IntSlice gibi yardımcılarla birlikte kullanılır.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 4, 2, 3}
sort.Sort(sort.Reverse(sort.IntSlice(nums)))
fmt.Println(nums)
}sort.Interface Arayüzü
Tam denetim için sort.Interface arayüzünü uygulayın: Len(), Less(i, j int) bool ve Swap(i, j int) olmak üzere üç yöntem.
package main
import (
"fmt"
"sort"
)
type ByLen []string
func (s ByLen) Len() int { return len(s) }
func (s ByLen) Less(i, j int) bool { return len(s[i]) < len(s[j]) }
func (s ByLen) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func main() {
w := []string{"ccc", "a", "bb"}
sort.Sort(ByLen(w))
fmt.Println(w)
}Hesaplanan Değere Göre Sıralama
Karşılaştırma her türlü ifadeyi kullanabilir. Sayıları sıfıra olan mutlak uzaklıklarına göre sıralayın.
package main
import (
"fmt"
"sort"
)
func abs(n int) int {
if n < 0 {
return -n
}
return n
}
func main() {
nums := []int{-5, 2, -1, 3}
sort.Slice(nums, func(i, j int) bool {
return abs(nums[i]) < abs(nums[j])
})
fmt.Println(nums)
}Büyük-Küçük Harfe Duyarsız Sıralama
Dizeleri sıralarken büyük-küçük harf farkını yok saymak için karşılaştırmanın içinde strings.ToLower kullanın.
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
w := []string{"banana", "Apple", "cherry"}
sort.Slice(w, func(i, j int) bool {
return strings.ToLower(w[i]) < strings.ToLower(w[j])
})
fmt.Println(w)
}Dilim ve Arayüz Karşılaştırması
Sıralamayı özelleştirmenin iki yolu vardır:
sort.Slice- hızlı, satır içinde tanımlanan küçük olma işlevisort.Interface- üç yöntem içeren, yeniden kullanılabilir adlandırılmış tür
Tek seferlik sıralamalar için sort.Slice kullanmayı tercih edin.
Karşılaştırmaları Saf Tutun
Bir karşılaştırma işlevi yalnızca öğeleri okumalı ve bir bool döndürmelidir. Dilimi değiştirmemeli veya yan etkilere sahip olmamalıdır; aksi hâlde sıralama öngörülemeyen şekilde davranabilir.
Kısa Kontrol
Kişileri yaşa, yaşlar eşitse ada göre sıralamak istiyorsunuz. Hangi tekniği kullanırsınız?
Özet
Her türlü sıralama düzenini tanımlayabilirsiniz:
- Küçük olma işlevi kuralınızı ifade eder
- Çok alanlı sıralamalarda eşitlik durumlarında ikinci alan karşılaştırılır
sort.Reversesıralama düzenini tersine çevirir;sort.Interfaceyeniden kullanılabilir türler sağlar
Sıkça Sorulan Sorular
“Özel Sıralama Düzenleri” dersi ücretsiz mi?
Evet — “Özel Sıralama Düzenleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Özel Sıralama Düzenleri” dersinde ne öğreneceğim?
Karşılaştırma işlevleri tanımlayın Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Özel Sıralama Düzenleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Dilimleri Sıralama
- Özel Sıralama Düzenleri
- Sıralı Verilerde Arama
- Kararlı Sıralama