OrderBy ve Gruplama
Sonuçları sıralayın ve gruplayın.
OrderBy ve Gruplama, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 3. 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, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
OrderBy ile Sıralama
OrderBy, seçtiğiniz bir anahtara göre bir diziyi artan sırada sıralar. Lambda, sıralamada kullanılacak değeri döndürür.
Yeni ve sıralanmış bir dizi döndürür ve kararlıdır; yani anahtarları eşit olan öğeler kendi aralarındaki ilk sıralarını korur.
using System;
using System.Linq;
int[] nums = { 4, 1, 3, 2 };
var sorted = nums.OrderBy(n => n);
Console.WriteLine(string.Join(", ", sorted));Azalan Sıralama
OrderByDescending, seçilen anahtara göre büyükten küçüğe sıralama yapar.
Artan sırada sıralayıp tersine çevirmek yerine bunu doğrudan kullanın; niyeti daha açık ifade eder ve sıralamayı tek geçişte gerçekleştirir.
using System;
using System.Linq;
int[] scores = { 70, 95, 60, 88 };
var ranked = scores.OrderByDescending(s => s);
Console.WriteLine(string.Join(", ", ranked));Özelliğe Göre Sıralama
Nesnelerde sıralama yapılacak özelliği seçin. OrderBy(p => p.Age), kişileri en gençten en yaşlıya doğru sıralar.
Anahtar; sayılar, dizeler ve tarihler gibi karşılaştırılabilir herhangi bir tür veya IComparable uygulayan herhangi bir tür olabilir.
using System;
using System.Linq;
using System.Collections.Generic;
record P(string Name, int Age);
var people = new List<P> { new("Ana", 30), new("Bo", 22) };
var byAge = people.OrderBy(p => p.Age);
foreach (var p in byAge) Console.WriteLine(p.Name);ThenBy ile İkincil Sıralama
ThenBy eşitlik durumunda ayırıcı bir ölçüt ekler. OrderBy işleminden sonra, birincil anahtarı aynı olan öğeleri ikinci bir anahtara göre sıralar.
Çok düzeyli sıralama için birkaç ThenBy/ThenByDescending çağrısını art arda kullanabilirsiniz.
using System;
using System.Linq;
using System.Collections.Generic;
record P(string Name, int Age);
var people = new List<P> { new("Bo", 30), new("Ana", 30), new("Cy", 22) };
var ordered = people.OrderBy(p => p.Age).ThenBy(p => p.Name);
foreach (var p in ordered) Console.WriteLine($"{p.Age} {p.Name}");Neden İkinci Bir OrderBy Kullanılmamalı
OrderBy işlemini iki kez çağırmak eşitlik durumunda ayırıcı bir ölçüt sağlamaz; ikinci çağrı tüm sıralamayı yeniden yapar ve ilk sıralamayı göz ardı eder.
Katmanlı sıralama için ilk OrderBy işleminden sonra her zaman ThenBy kullanın.
using System;
using System.Linq;
using System.Collections.Generic;
record P(string N, int A);
var ps = new List<P> { new("Bo", 30), new("Ana", 30) };
var wrong = ps.OrderBy(p => p.A).OrderBy(p => p.N);
foreach (var p in wrong) Console.WriteLine(p.N);Sorgu Sözdizimindeki orderby
Sorgu sözdiziminde bir orderby yan tümcesi bulunur. Birden çok anahtarı virgülle ayırarak listeleyebilir, isteğe bağlı olarak descending kullanabilirsiniz.
orderby p.Age, p.Name descending, yaşa göre; eşitlik durumunda ise ada göre tersten sıralama yapar.
using System;
using System.Linq;
using System.Collections.Generic;
record P(string N, int A);
var ps = new List<P> { new("Bo", 30), new("Ana", 30), new("Cy", 22) };
var q = from p in ps orderby p.A, p.N select p.N;
Console.WriteLine(string.Join(", ", q));GroupBy ile Gruplama
GroupBy, bir diziyi aynı anahtarı paylaşan gruplara ayırır. IGrouping<TKey, TElement> dizisi döndürür.
Her gruplama kendi Key değerini sunar ve o gruptaki öğeler üzerinde yineleme yapılabilen bir yapıdır.
using System;
using System.Linq;
int[] nums = { 1, 2, 3, 4, 5, 6 };
var groups = nums.GroupBy(n => n % 2 == 0 ? "even" : "odd");
foreach (var g in groups)
Console.WriteLine($"{g.Key}: {string.Join(\",\", g)}");Grup Anahtarı ve Üyeler
Her grubun Key değeri, bölümü tanımlar; grup üzerinde yineleme yapmak üyelerini verir. Bir grup üzerinde doğrudan Count() çağrısı yapabilirsiniz.
Histogramları, toplamları ve kategori dökümlerini bu şekilde oluşturabilirsiniz.
using System;
using System.Linq;
string[] fruit = { "apple", "avocado", "banana", "cherry" };
var byLetter = fruit.GroupBy(f => f[0]);
foreach (var g in byLetter)
Console.WriteLine($"{g.Key}: {g.Count()}");Grupla, Sonra Projeksiyon Yap
Yaygın bir yaklaşım, GroupBy işleminden sonra Select kullanarak her grubu bir özet nesnesine dönüştürmektir.
Key değerini okur ve üyeleri toplulaştırırsınız; örneğin her grup için bir sayım veya toplam elde edersiniz.
using System;
using System.Linq;
using System.Collections.Generic;
record Sale(string City, int Amt);
var sales = new List<Sale> { new("NY", 5), new("LA", 3), new("NY", 2) };
var totals = sales.GroupBy(s => s.City)
.Select(g => new { g.Key, Sum = g.Sum(x => x.Amt) });
foreach (var t in totals) Console.WriteLine($"{t.Key}={t.Sum}");Öğe Seçici ile GroupBy
GroupBy, ikinci bir lambda alan bir aşırı yüklemeye sahiptir. Bu öğe seçici, her grubun yalnızca nasıl anahtarlanacağını değil, ne depolayacağını da belirler.
Burada şehre göre grupluyor, ancak yalnızca tutarları depoluyoruz.
using System;
using System.Linq;
using System.Collections.Generic;
record Sale(string City, int Amt);
var sales = new List<Sale> { new("NY", 5), new("NY", 2) };
var g = sales.GroupBy(s => s.City, s => s.Amt);
foreach (var grp in g)
Console.WriteLine($"{grp.Key}: {string.Join(\",\", grp)}");Sıralama ve Gruplama Ertelenmiştir
Hem OrderBy hem de GroupBy ertelenmiş yürütme kullanır; yani numaralandırıldıklarında çalışırlar. Ancak ilk öğeyi üretebilmek için sıralamanın ve gruplamanın tüm kaynağı tüketmesi gerektiğini unutmayın.
Bu nedenle Where işleminden farklı olarak akış halinde çalışmazlar; maliyet ilk yineleme sırasında ortaya çıkar.
using System;
using System.Linq;
int[] nums = { 3, 1, 2 };
var q = nums.OrderBy(n => n);
Console.WriteLine("Query built");
Console.WriteLine(string.Join(", ", q));Kısa Kontrol
Çok düzeyli sıralamayı düşünün.
Özet
OrderBy/OrderByDescending bir anahtara göre sıralama yapar; ThenBy ise eşitlik durumunda ayırıcı ölçütler ekler. İkinci bir OrderBy sıralamayı yeniden yapar ve eşitlik durumunda ayırıcı bir ölçüt değildir.
GroupBy, bir IGrouping nesneleri dizisi oluşturur. Bu nesnelerde bir Key ve üyeler bulunur; nesneler çoğu zaman özetlere dönüştürülür. Her ikisi de ertelenmiştir, ancak tüm kaynağı tüketir. Sırada toplulaştırma ve sonuçları belleğe alma var.
Sıkça Sorulan Sorular
“OrderBy ve Gruplama” dersi ücretsiz mi?
Evet — “OrderBy ve Gruplama” 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 C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“OrderBy ve Gruplama” dersinde ne öğreneceğim?
Sonuçları sıralayın ve gruplayın. C# 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.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# 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 3. dersidir.
“OrderBy ve Gruplama” 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 C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# 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
- Where ve Filtreleme
- SELECT ve Projeksiyon
- OrderBy ve Gruplama
- Toplu İşlemler ve ToList