0Pricing
Go Academy · Ders

Ö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şlevi
  • sort.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.Reverse sıralama düzenini tersine çevirir; sort.Interface yeniden 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

  1. Dilimleri Sıralama
  2. Özel Sıralama Düzenleri
  3. Sıralı Verilerde Arama
  4. Kararlı Sıralama
← Go Academy Sayfasına Dön