List dalam Amalan
Tambah, buang dan cari.
List dalam Amalan ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 1 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.
Mengapa List<T>?
List<T> ialah tatasusunan dinamik yang biasa digunakan dalam C#. Ia berada dalam System.Collections.Generic dan berkembang secara automatik apabila Anda menambah item.
Berbeza daripada tatasusunan biasa, Anda tidak perlu menetapkan saiz tetap dari awal. Ia selamat dari segi jenis: List<int> hanya mengandungi nilai int, dan kesalahan dikesan semasa kompilasi.
using System.Collections.Generic;
List<int> scores = new List<int>();
scores.Add(90);
scores.Add(85);Mencipta dan Memulakan
Anda boleh mengisi senarai serta-merta menggunakan pemula koleksi. Cara ini ringkas dan mudah dibaca.
Pengkompil menukar setiap entri kepada panggilan Add di sebalik tabir, jadi hasilnya sama seperti menambah item satu demi satu.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var fruits = new List<string> { "apple", "pear", "plum" };
Console.WriteLine(fruits.Count);
}
}Pengindeksan dan Bilangan
Akses elemen menggunakan indeks bermula daripada sifar, sama seperti tatasusunan. list[0] ialah item pertama.
Gunakan Count, bukan Length, untuk mendapatkan bilangan item yang terkandung dalam senarai. Membaca atau menulis menggunakan indeks mengambil masa malar O(1).
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var nums = new List<int> { 10, 20, 30 };
Console.WriteLine(nums[1]);
Console.WriteLine(nums.Count);
}
}Menambah dan Menyisipkan
Add menambah item di hujung dalam masa O(1) teramortisasi. AddRange menambah banyak item serentak.
Insert(index, item) meletakkan item pada sesuatu kedudukan dan mengalih semua item selepasnya. Pengalihan itu menjadikan Insert di bahagian hadapan mengambil masa O(n), jadi utamakan penambahan di hujung apabila boleh.
var list = new List<string> { "b", "c" };
list.Insert(0, "a");
list.AddRange(new[] { "d", "e" });
// list is now a, b, c, d, eMembuang Item
Remove(item) memadam nilai pertama yang sepadan dan mengembalikan true jika ditemui. RemoveAt(index) memadam berdasarkan kedudukan.
Kedua-duanya mengalih elemen selepasnya ke kiri, jadi pembuangan dari tengah mengambil masa O(n). RemoveAll menerima predikat dan membuang semua padanan dalam satu laluan.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var nums = new List<int> { 1, 2, 3, 4, 5 };
nums.RemoveAll(n => n % 2 == 0);
Console.WriteLine(string.Join(",", nums));
}
}Mencari dalam Senarai
Contains memberitahu Anda sama ada sesuatu nilai wujud; IndexOf memberikan kedudukannya atau -1. Kedua-duanya mengimbas secara linear, O(n).
Jika Anda kerap mencari berdasarkan nilai dalam senarai yang besar, kos linear itu akan terkumpul. HashSet atau Dictionary mungkin lebih sesuai.
var names = new List<string> { "Ann", "Bob", "Cy" };
bool hasBob = names.Contains("Bob"); // true
int pos = names.IndexOf("Cy"); // 2Melakukan Lelangan
Gelung foreach ialah cara paling jelas untuk membaca setiap elemen. Anda juga boleh menggunakan gelung for biasa apabila memerlukan indeks.
Jangan menambah atau membuang item dalam gelung foreach yang mengulangi senarai yang sama kerana tindakan itu mencetuskan InvalidOperationException.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var colors = new List<string> { "red", "green", "blue" };
foreach (var c in colors)
Console.WriteLine(c);
}
}Mengisih
Sort() mengisih senarai terus pada tempatnya menggunakan pembanding lalai. Untuk susunan tersuai, berikan delegat perbandingan.
Pengisihan mengambil masa O(n log n). Untuk mendapatkan salinan yang telah diisih tanpa mengubah nilai asal, gunakan OrderBy LINQ, yang mengembalikan jujukan baharu.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var nums = new List<int> { 4, 1, 3, 2 };
nums.Sort();
Console.WriteLine(string.Join(",", nums));
}
}Kapasiti berbanding Bilangan
Count ialah bilangan item yang wujud; Capacity ialah bilangan item yang boleh ditampung sebelum tatasusunan dalamannya diperuntukkan semula.
Apabila senarai berkembang melebihi kapasiti, senarai itu memperuntukkan tatasusunan yang lebih besar dan menyalin item, biasanya dengan menggandakan saiz. Jika Anda mengetahui saiz akhir, berikan saiz itu kepada pembina untuk mengelakkan penyalinan berulang.
var list = new List<int>(1000); // reserve capacity
for (int i = 0; i < 1000; i++)
list.Add(i);
// no intermediate reallocationsSenarai sebagai Argumen Kaedah
List<T> ialah jenis rujukan. Apabila Anda menghantarnya kepada kaedah, yang dihantar ialah rujukannya, jadi perubahan dalam kaedah itu memberi kesan kepada senarai pemanggil.
Jika kaedah hanya membaca, terima IEnumerable<T> atau IReadOnlyList<T> untuk menunjukkan bahawa Anda tidak akan mengubahnya.
using System;
using System.Collections.Generic;
class Program {
static void AddOne(List<int> xs) => xs.Add(1);
static void Main() {
var nums = new List<int>();
AddOne(nums);
Console.WriteLine(nums.Count); // 1
}
}Menukar dan Menyalin
ToArray() menghasilkan tatasusunan bersaiz tetap; new List<T>(other) menghasilkan salinan cetek daripada jujukan lain.
Salinan cetek menggandakan struktur senarai tetapi berkongsi rujukan elemen yang sama, jadi perubahan pada objek yang terkandung dapat dilihat melalui kedua-dua senarai.
var original = new List<int> { 1, 2, 3 };
int[] arr = original.ToArray();
var copy = new List<int>(original);Semakan Pantas
Pilih operasi yang kosnya paling ketara.
Ringkasan
List<T> ialah tatasusunan yang boleh berkembang dan selamat dari segi jenis. Akses indeks dan Count mengambil masa O(1); Add di hujung mengambil masa O(1) teramortisasi.
Penyisipan, pembuangan dan carian berdasarkan nilai di tengah mengambil masa O(n) kerana pengalihan atau pengimbasan. Tempah kapasiti apabila saiz telah diketahui untuk mengelakkan peruntukan semula.
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 “List dalam Amalan” percuma?
Ya — teks penuh “List dalam Amalan” 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 “List dalam Amalan”?
Tambah, buang dan cari. 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 1 daripada 4.
Berapa lamakah pelajaran “List dalam Amalan” 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
- List dalam Amalan
- Carian Dictionary
- HashSet dan Keunikan
- Memilih Koleksi