ماڈیول اسباق (5/5)
ترتیب پیکج کے ساتھ چھانٹنا
معیاری sort پیکیج سلائسز کو ان جگہ ترتیب دیتا ہے۔ بنیادی اقسام کے لیے
(int, float64, string) براہ راست مددگار ہیں؛ آپ کے کسی دوسرے ٹکڑے کے لیے
استعمال کریں sort.Slice ایک less(i, j int) bool فنکشن کے ساتھ جو
آرڈر کرنا
بنیادی اقسام کے لیے مددگار
import "sort"
nums := []int{5, 2, 8, 1}
sort.Ints(nums) // [1 2 5 8]
words := []string{"c", "a", "b"}
sort.Strings(words) // [a b c]
fs := []float64{1.5, 0.5, 2.5}
sort.Float64s(fs) // [0.5 1.5 2.5]ترتیب جگہ میں ہے: اصل ٹکڑا بدلا ہوا ہے۔
sort.Slice: حسب ضرورت چھانٹنا
آپ ٹکڑا اور ایک less فنکشن پاس کرتے ہیں جسے، دو انڈیکس دیئے گئے ہیں i اور
j، لوٹاتا ہے true اگر عنصر i کو j سے پہلے آنا چاہئے:
type Person struct {
Name string
Age int
}
people := []Person{
{"Bruno", 30},
{"Anna", 25},
{"Carla", 28},
}
sort.Slice(people, func(i, j int) bool {
return people[i].Age < people[j].Age
})
// Anna(25), Carla(28), Bruno(30)ریورس میں ترتیب دینے کے لیے، صرف موازنہ کو پلٹائیں:
return people[i].Age > people[j].Age
مستحکم ترتیب
sort.Slice کے مستحکم ہونے کی ضمانت نہیں ہے ("برابر" عناصر تبدیل ہو سکتے ہیں
رشتہ دار آرڈر)۔ مستحکم ترتیب کے لیے استعمال کریں sort.SliceStable:
sort.SliceStable(people, func(i, j int) bool {
return people[i].Age < people[j].Age
})ایک سے زیادہ چابیاں کی طرف سے چھانٹ رہا ہے
عام پیٹرن: عمر کے لحاظ سے ترتیب دیں، اور برابر عمروں کے لیے نام کے لحاظ سے:
sort.Slice(people, func(i, j int) bool {
if people[i].Age != people[j].Age {
return people[i].Age < people[j].Age
}
return people[i].Name < people[j].Name
})بائنری تلاش
sort.SearchInts / sort.Search پہلے سے ترتیب شدہ سلائسوں پر کام کرتا ہے:
nums := []int{1, 3, 5, 7, 9}
i := sort.SearchInts(nums, 5) // 2اگر عنصر وہاں نہیں ہے، تو یہ اندراج انڈیکس لوٹاتا ہے۔ آپ کھود سکتے ہیں۔ جب آپ کو ان کی ضرورت ہو تو تفصیلات میں۔
عمومیات (1.21+ پر جائیں): slices.Sort
stdlib میں slices پیکیج سے (1.21 پر جائیں):
import "slices"
nums := []int{3, 1, 2}
slices.Sort(nums) // [1 2 3]
slices.SortFunc(people, func(a, b Person) int {
return a.Age - b.Age // -1/0/1
})زیادہ جدید، ٹائپ سیف API۔ sort.Slice کے ساتھ ہم آہنگ لیکن مزید
ایرگونومک
اسے آزمائیں
sort.Ints کا استعمال کرتے ہوئے نمبروں کو صعودی ترتیب میں ترتیب دیں۔
اشارہ دکھائیں۔
`sort.Ints` جگہ میں ایک int سلائس کو ترتیب دیتا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔
sort.Slice کا استعمال کرتے ہوئے لوگوں کو عمر کے لحاظ سے صعودی ترتیب میں ترتیب دیں۔
اشارہ دکھائیں۔
کم فنکشن درست ہو جاتا ہے جب عنصر i کو j سے پہلے آنا چاہیے۔
3 کوششوں کے بعد حل دستیاب ہے۔
آپ sort.Slice کے ساتھ نزولی ترتیب میں کیسے ترتیب دیتے ہیں؟
sort.Slice(s, func(i, j int) bool { return ??? })Recap
sort.Ints/sort.Strings/sort.Float64sبنیادی اقسام کے لئے، جگہ جگہ۔sort.Slice(s, less)کسی بھی قسم کے سلائسز کے لیے، ایکless(i, j)فنکشن کے ساتھ۔sort.SliceStableمساوی کلیدوں کے لیے متعلقہ ترتیب کو محفوظ رکھنے کے لیے۔- متعدد کلیدوں کے حساب سے چھانٹنا:
lessکے اندرifs کا جھرن۔ - 1.21+ پر جائیں:
slicesپیکیج ایک عام API کے ساتھ (slices.Sort,slices.SortFunc)۔ - نقشہ کی چابیاں کے لیے: ایک ٹکڑے میں نکالیں اور چھانٹیں۔