Informace o správě shromažďování dat pomocí seznamu<T> v jazyce C#
Tento úvodní kurz poskytuje úvod do jazyka C# a základy List<T> třídy.
Požadavky
Kurz očekává, že máte počítač nastavený pro místní vývoj. Pokyny k instalaci a přehled vývoje aplikací v .NET najdete v tématu Nastavení místního prostředí .
Pokud dáváte přednost spuštění kódu, aniž byste museli nastavovat místní prostředí, projděte si interaktivní verzi tohoto kurzu v prohlížeči.
Příklad základního seznamu
Vytvořte adresář s názvem list-tutorial. Nastavte aktuální adresář a spusťte dotnet new console
příkaz .
Důležité
Šablony jazyka C# pro .NET 6 používají příkazy nejvyšší úrovně. Pokud jste už upgradovali na .NET 6, vaše aplikace nemusí odpovídat kódu v tomto článku. Další informace najdete v článku Nové šablony jazyka C# vygenerují příkazy nejvyšší úrovně.
Sada .NET 6 SDK také přidává sadu implicitníchglobal using
direktiv pro projekty, které používají následující sady SDK:
- Microsoft.NET.Sdk
- Microsoft.NET.Sdk.Web
- Microsoft.NET.Sdk.Worker
Tyto implicitní global using
direktivy zahrnují nejběžnější obory názvů pro typ projektu.
Další informace najdete v článku o direktivách implicitního použití.
Otevřete program.cs v oblíbeném editoru a nahraďte existující kód následujícím kódem:
List<string> names = ["<name>", "Ana", "Felipe"];
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
Nahraďte <name>
svým jménem. Soubor Program.cs uložte. Pokud to chcete vyzkoušet, zadejte dotnet run
do okna konzoly.
Vytvořili jste seznam řetězců, přidali jste do tohoto seznamu tři názvy a vytiskli jste názvy ve všech caps. K procházení seznamu používáte koncepty, které jste se naučili v předchozích kurzech.
Kód pro zobrazení názvů využívá funkci interpolace řetězců . Když před znakem string
předejdete znakem $
, můžete do deklarace řetězce vložit kód jazyka C#. Skutečný řetězec nahradí kód jazyka C# hodnotou, kterou vygeneruje. V tomto příkladu {name.ToUpper()}
nahradí jednotlivé názvy převedené na velká písmena, protože jste volali metodu ToUpper .
Pojďme se na to dál pustit.
Úprava obsahu seznamu
Kolekce, kterou jste vytvořili, používá typ List<T> . Tento typ ukládá sekvence prvků. Určíte typ prvků mezi úhlovými závorkami.
Jedním z důležitých aspektů tohoto List<T> typu je, že se může zvětšit nebo zmenšit, což vám umožní přidávat nebo odebírat prvky. Na konec programu přidejte tento kód:
Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
Na konec seznamu jste přidali další dvě jména. Také jste odebrali jeden. Uložte soubor a zadáním příkazu dotnet run
ho vyzkoušejte.
Umožňuje List<T> odkazovat také na jednotlivé položky podle indexu . Index umístíte mezi [
tokeny a ]
za názvem seznamu. C# používá pro první index 0. Přidejte tento kód přímo pod kód, který jste právě přidali, a vyzkoušejte ho:
Console.WriteLine($"My name is {names[0]}");
Console.WriteLine($"I've added {names[2]} and {names[3]} to the list");
K indexu za koncem seznamu nemůžete získat přístup. Mějte na paměti, že indexy začínají na hodnotě 0, takže největší platný index je o jeden menší než počet položek v seznamu. Můžete zkontrolovat, jak dlouho seznam tuto vlastnost používá Count . Na konec programu přidejte následující kód:
Console.WriteLine($"The list has {names.Count} people in it");
Uložte soubor a zadejte dotnet run
znovu, abyste viděli výsledky.
Hledání a řazení seznamů
Naše ukázky používají relativně malé seznamy, ale vaše aplikace můžou často vytvářet seznamy s mnoha dalšími prvky, někdy se číslují v tisících. Pokud chcete najít prvky v těchto větších kolekcích, musíte v seznamu vyhledat různé položky. Metoda IndexOf vyhledá položku a vrátí index položky. Pokud položka není v seznamu, IndexOf
vrátí .-1
Do dolní části programu přidejte tento kód:
var index = names.IndexOf("Felipe");
if (index == -1)
{
Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
Console.WriteLine($"The name {names[index]} is at index {index}");
}
index = names.IndexOf("Not Found");
if (index == -1)
{
Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
Console.WriteLine($"The name {names[index]} is at index {index}");
}
Položky v seznamu lze také seřadit. Metoda Sort seřadí všechny položky v seznamu v jejich normálním pořadí (podle abecedy pro řetězce). Do dolní části programu přidejte tento kód:
names.Sort();
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
Uložte soubor a zadejte dotnet run
a vyzkoušejte tuto nejnovější verzi.
Než začnete s další částí, přesuňme aktuální kód do samostatné metody. To usnadňuje práci s novým příkladem. Veškerý kód, který jste napsali, umístěte do nové metody s názvem WorkWithStrings()
. Volejte metodu v horní části programu. Po dokončení by měl váš kód vypadat takto:
WorkWithStrings();
void WorkWithStrings()
{
List<string> names = ["<name>", "Ana", "Felipe"];
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
Console.WriteLine($"My name is {names[0]}");
Console.WriteLine($"I've added {names[2]} and {names[3]} to the list");
Console.WriteLine($"The list has {names.Count} people in it");
var index = names.IndexOf("Felipe");
if (index == -1)
{
Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
Console.WriteLine($"The name {names[index]} is at index {index}");
}
index = names.IndexOf("Not Found");
if (index == -1)
{
Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
Console.WriteLine($"The name {names[index]} is at index {index}");
}
names.Sort();
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
}
Seznamy jiných typů
Typ jste zatím používali string
v seznamech. Pojďme použít List<T> jiný typ. Pojďme sestavit sadu čísel.
Po volání WorkWithStrings()
přidejte do programu následující:
List<int> fibonacciNumbers = [1, 1];
Tím se vytvoří seznam celých čísel a první dvě celá čísla nastaví na hodnotu 1. Jedná se o první dvě hodnoty Fibonacciho posloupnosti, posloupnosti čísel. Každé další Fibonacciho číslo se najde tak, že se vezme součet předchozích dvou čísel. Přidejte tento kód:
var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];
fibonacciNumbers.Add(previous + previous2);
foreach (var item in fibonacciNumbers)
{
Console.WriteLine(item);
}
Pokud chcete zobrazit výsledky, uložte soubor a zadejte dotnet run
ho.
Tip
Pokud se chcete soustředit jenom na tuto část, můžete zakomentovat kód, který volá WorkWithStrings();
. Stačí před hovor vložit dva /
znaky takto: // WorkWithStrings();
.
Úkol
Podívejte se, jestli můžete dát dohromady některé koncepty z této a dřívější lekce. Rozšiřte to, co jste zatím vytvořili pomocí Fibonacciho čísel. Zkuste napsat kód, který vygeneruje prvních 20 čísel v sekvenci. (Pro narážku, 20. Fibonacciho číslo je 6765.)
Dokončení výzvy
Ukázkové řešení si můžete prohlédnout v hotovém ukázkovém kódu na GitHubu.
Při každé iteraci smyčky vezmete poslední dvě celá čísla v seznamu, sečtete je a přidáte tuto hodnotu do seznamu. Smyčka se opakuje, dokud do seznamu nepřidáte 20 položek.
Blahopřejeme, dokončili jste kurz seznamu. Ve vlastním vývojovém prostředí můžete pokračovat dalšími kurzy.
Další informace o práci s typem List
najdete v článku základy .NET o kolekcích. Dozvíte se také o mnoha dalších typech kolekcí.