Akademi C# · Pelajaran

OrderBy dan Pengelompokan

Isih dan kelompokkan hasil.

Pelajaran 3 daripada 413 langkah

OrderBy dan Pengelompokan ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Menyusun dengan OrderBy

OrderBy menyusun jujukan secara menaik berdasarkan kunci yang anda pilih. Lambda mengembalikan nilai yang digunakan untuk penyusunan.

Ia mengembalikan jujukan tersusun yang baharu dan bersifat stabil, bermaksud elemen yang mempunyai kunci sama mengekalkan susunan relatif asalnya.

using System;
using System.Linq;

int[] nums = { 4, 1, 3, 2 };
var sorted = nums.OrderBy(n => n);
Console.WriteLine(string.Join(", ", sorted));

Susunan Menurun

OrderByDescending menyusun daripada nilai terbesar kepada nilai terkecil berdasarkan kunci yang dipilih.

Gunakannya secara langsung dan bukannya menyusun secara menaik kemudian membalikkan susunan — cara ini menyatakan maksud dengan jelas dan melakukan penyusunan dalam satu laluan.

using System;
using System.Linq;

int[] scores = { 70, 95, 60, 88 };
var ranked = scores.OrderByDescending(s => s);
Console.WriteLine(string.Join(", ", ranked));

Menyusun berdasarkan Sifat

Bagi objek, pilih sifat yang hendak dijadikan asas susunan. OrderBy(p => p.Age) menyusun people daripada yang paling muda kepada yang paling tua.

Kunci itu boleh berupa apa-apa jenis yang boleh dibandingkan — nombor, rentetan, tarikh — atau apa-apa yang melaksanakan IComparable.

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);

Pengisihan Sekunder dengan ThenBy

ThenBy menambah penentu seri. Selepas OrderBy, ia mengisih elemen yang berkongsi kunci utama berdasarkan kunci kedua.

Anda boleh merangkaikan beberapa panggilan ThenBy/ThenByDescending untuk pengisihan berbilang peringkat.

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}");

Mengapa Bukan OrderBy Kedua

Memanggil OrderBy dua kali tidak memberikan penentu seri — panggilan kedua mengisih semula sepenuhnya dan membuang susunan pertama.

Untuk pengisihan berlapis, sentiasa gunakan ThenBy selepas OrderBy awal.

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);

Sintaks Pertanyaan untuk Pengisihan

Sintaks pertanyaan mempunyai klausa orderby. Senaraikan beberapa kunci yang dipisahkan dengan koma, secara pilihan bersama descending.

orderby p.Age, p.Name descending mengisih berdasarkan umur, kemudian berdasarkan nama secara terbalik jika terdapat seri.

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));

Pengumpulan dengan GroupBy

GroupBy membahagikan urutan kepada kumpulan yang berkongsi kunci. Ia mengembalikan urutan IGrouping<TKey, TElement>.

Setiap kumpulan memaparkan Key dan kumpulan itu sendiri boleh dilalui untuk mendapatkan elemen di dalamnya.

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)}");

Kunci dan Ahli Kumpulan

Key setiap kumpulan mengenal pasti bahagian tersebut, manakala melalui kumpulan akan menghasilkan ahlinya. Anda boleh memanggil Count() secara terus pada kumpulan.

Beginilah caranya Anda membina histogram, kiraan dan pecahan mengikut kategori.

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()}");

Kumpulkan Kemudian Bentukkan

Pola yang biasa digunakan ialah membentuk setiap kumpulan menjadi objek ringkasan menggunakan Select selepas GroupBy.

Anda membaca Key dan mengagregatkan ahli-ahli tersebut — contohnya, mendapatkan kiraan atau jumlah bagi setiap kumpulan.

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}");

GroupBy dengan Pemilih Elemen

GroupBy mempunyai beban lampau yang menerima lambda kedua — pemilih elemen — yang menentukan perkara yang disimpan oleh setiap kumpulan, bukan sekadar cara kumpulan itu dikunci.

Di sini kita mengumpulkan berdasarkan bandar tetapi hanya menyimpan amaun.

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)}");

Pengisihan dan Pengumpulan Ditangguhkan

Kedua-dua OrderBy dan GroupBy menggunakan pelaksanaan tertunda — ia berjalan apabila urutan dilalui. Namun, ambil perhatian bahawa pengisihan dan pengumpulan perlu menggunakan keseluruhan sumber untuk menghasilkan elemen pertama.

Jadi, tidak seperti Where, kedua-duanya tidak beroperasi secara penstriman; kosnya ditanggung pada lelaran pertama.

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));

Semakan Pantas

Fikirkan tentang pengisihan berbilang peringkat.

Ringkasan

OrderBy/OrderByDescending mengisih berdasarkan kunci; ThenBy menambah penentu seri. OrderBy kedua mengisih semula dan bukan penentu seri.

GroupBy membahagikan urutan kepada objek IGrouping yang mempunyai Key dan ahli-ahli, yang sering dibentuk menjadi ringkasan. Kedua-duanya ditangguhkan tetapi menggunakan keseluruhan sumber. Seterusnya, kita akan mengagregatkan dan membentuk hasil sebenar.

Percuma untuk bermula

Pelajari C# dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
93
Pelajaran
346

Soalan Lazim

Adakah pelajaran “OrderBy dan Pengelompokan” percuma?

Ya — teks penuh “OrderBy dan Pengelompokan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “OrderBy dan Pengelompokan”?

Isih dan kelompokkan hasil. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “OrderBy dan Pengelompokan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?

Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. WHERE dan Penapisan
  2. SELECT dan Unjuran
  3. OrderBy dan Pengelompokan
  4. Agregat dan ToList
← Kembali ke Akademi C#