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 consolepří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í.