C'de Liste<T'yi> kullanarak veri koleksiyonlarını yönetmeyi öğrenin#

Bu giriş öğreticisi, C# diline ve sınıfın temellerine List<T> giriş sağlar.

Önkoşullar

Öğretici, yerel geliştirme için ayarlanmış bir makineniz olmasını bekler. Yükleme yönergeleri ve .NET'te uygulama geliştirmeye genel bakış için bkz. Yerel ortamınızı ayarlama .

Yerel bir ortam ayarlamak zorunda kalmadan kodu çalıştırmayı tercih ediyorsanız , bu öğreticinin tarayıcı içi etkileşimli sürümüne bakın.

Temel liste örneği

list-tutorial adlı bir dizin oluşturun. Bunu geçerli dizin yapın ve çalıştırın dotnet new console.

Önemli

.NET 6 için C# şablonları en üst düzey deyimleri kullanır. .NET 6'ya zaten yükselttiyseniz uygulamanız bu makaledeki kodla eşleşmeyebilir. Daha fazla bilgi için Yeni C# şablonları en üst düzey deyimleri oluşturma makalesine bakın

.NET 6 SDK'sı, aşağıdaki SDK'ları kullanan projeler için bir dizi örtükglobal using yönerge de ekler:

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Bu örtük global using yönergeler, proje türü için en yaygın ad alanlarını içerir.

Daha fazla bilgi için Örtük kullanım yönergeleri makalesine bakın

Sık kullandığınız düzenleyicide Program.cs dosyasını açın ve mevcut kodu aşağıdakilerle değiştirin:

List<string> names = ["<name>", "Ana", "Felipe"];
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

yerine adınızı yazın <name> . Program.cs dosyasını kaydedin. Denemek için konsol pencerenize yazın dotnet run .

Bir dize listesi oluşturdunuz, bu listeye üç ad eklediniz ve adları tüm CAPS'lere yazdırmıştınız. Listede döngü yapmak için önceki öğreticilerde öğrendiğiniz kavramları kullanıyorsunuz.

Adların görüntüleneceği kod , dize ilişkilendirme özelliğini kullanır. karakterinden $ önce gelen string C# kodunu dize bildirimine ekleyebilirsiniz. Gerçek dize, bu C# kodunun oluşturduğu değerle değiştirir. Bu örnekte, yöntemini çağırdığınız ToUpper için öğesini büyük harflere dönüştürülmüş her adla değiştirir{name.ToUpper()}.

Keşfetmeye devam edelim.

Liste içeriğini değiştirme

Oluşturduğunuz koleksiyon türünü List<T> kullanır. Bu tür, öğe dizilerini depolar. Köşeli ayraçlar arasındaki öğelerin türünü belirtirsiniz.

Bu List<T> türün önemli yönlerinden biri, öğeleri eklemenize veya kaldırmanıza olanak tanıyarak büyüyebilmesi veya küçülebilmesidir. Bu kodu programınızın sonuna ekleyin:

Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

Listenin sonuna iki ad daha eklediniz. Ayrıca bir tane de kaldırdınız. Dosyayı kaydedin ve denemek için yazın dotnet run .

, List<T> tek tek öğelere dizine göre de başvurmanızı sağlar. Dizini, liste adının ardından ve ] belirteçleri arasına [ yerleştirirsiniz. C# ilk dizin için 0 kullanır. Bu kodu yeni eklediğiniz kodun hemen altına ekleyin ve deneyin:

Console.WriteLine($"My name is {names[0]}");
Console.WriteLine($"I've added {names[2]} and {names[3]} to the list");

Listenin sonundan sonra bir dizine erişemezsiniz. Dizinlerin 0'dan başladığını, bu nedenle en büyük geçerli dizinin listedeki öğe sayısından bir az olduğunu unutmayın. Listenin özelliğini ne kadar süreyle kullandığını Count kontrol edebilirsiniz. Programınızın sonuna aşağıdaki kodu ekleyin:

Console.WriteLine($"The list has {names.Count} people in it");

Dosyayı kaydedin ve sonuçları görmek için yeniden yazın dotnet run .

Listeleri arama ve sıralama

Örneklerimiz görece küçük listeler kullanır, ancak uygulamalarınız genellikle çok daha fazla öğe içeren listeler oluşturabilir ve bazen binler içinde numaralanabilir. Bu daha büyük koleksiyonlardaki öğeleri bulmak için listede farklı öğeler aramanız gerekir. IndexOf yöntemi bir öğeyi arar ve öğenin dizinini döndürür. Öğe listede yoksa döndürür IndexOf-1. Bu kodu programınızın en altına ekleyin:

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

}

Listenizdeki öğeler de sıralanabilir. yöntemi listedeki Sort tüm öğeleri normal düzenlerinde sıralar (dizeler için alfabetik olarak). Bu kodu programınızın en altına ekleyin:

names.Sort();
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

Bu en son sürümü denemek için dosyayı kaydedin ve yazın dotnet run .

Sonraki bölüme başlamadan önce geçerli kodu ayrı bir yönteme taşıyalım. Bu, yeni bir örnekle çalışmaya başlamayı kolaylaştırır. Yazdığınız tüm kodu adlı WorkWithStrings()yeni bir yönteme yerleştirin. Programınızın üst kısmında bu yöntemi çağırın. bitirdiğinizde kodunuz şu şekilde görünmelidir:

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

Diğer türlerin listeleri

Şimdiye kadar listelerde türünü kullanıyordunuz string . Şimdi farklı bir tür kullanarak oluşturalım List<T> . Şimdi bir sayı kümesi oluşturalım.

çağrısı WorkWithStrings()yaptıktan sonra aşağıdakileri programınıza ekleyin:

List<int> fibonacciNumbers = [1, 1];

Bu, bir tamsayı listesi oluşturur ve ilk iki tamsayıyı 1 değerine ayarlar. Bunlar bir Fibonacci Dizisinin ilk iki değeridir ve bir sayı dizisidir. Sonraki her Fibonacci sayısı, önceki iki sayının toplamı alınarak bulunur. Şu kodu ekleyin:

var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];

fibonacciNumbers.Add(previous + previous2);

foreach (var item in fibonacciNumbers)
{
    Console.WriteLine(item);
}

Sonuçları görmek için dosyayı kaydedin ve yazın dotnet run .

İpucu

Yalnızca bu bölüme odaklanmak için çağıran WorkWithStrings();kodu açıklama satırı yapabilirsiniz. Çağrının önüne şu şekilde iki / karakter koyun: // WorkWithStrings();.

Sınama

Bu ve önceki derslerden bazı kavramları bir araya getirip birleştirebileceğinize bakın. Fibonacci Numbers ile şimdiye kadar derlediğiniz şeyi genişletin. Dizideki ilk 20 sayıyı oluşturmak için kodu yazmayı deneyin. (İpucu olarak, 20. Fibonacci sayısı 6765'tir.)

Görevi tamamlama

GitHub'daki tamamlanmış örnek koda bakarak örnek bir çözüm görebilirsiniz.

Döngünün her yinelemesiyle, listedeki son iki tamsayıyı alır, bunları toplar ve bu değeri listeye eklersiniz. Döngü, listeye 20 öğe ekleyene kadar yineleniyor.

Tebrikler, liste öğreticisini tamamladınız. Kendi geliştirme ortamınızda ek öğreticilerle devam edebilirsiniz.

Koleksiyonlarla ilgili .NET temelleri makalesinde türüyle List çalışma hakkında daha fazla bilgi edinebilirsiniz. Ayrıca diğer birçok koleksiyon türü hakkında da bilgi edineceksiniz.