Szukaj…


Uwagi

Istnieje kilka rodzajów kolekcji:

  • Array
  • List
  • Queue
  • SortedList
  • Stack
  • Słownik

Tworzenie zainicjowanej listy z niestandardowymi typami

public class Model
{
    public string Name { get; set; }
    public bool? Selected { get; set; }
}

Tutaj mamy klasę bez konstruktora o dwóch właściwościach: Name i nullable Właściwość logiczna Selected . Jeśli chcemy zainicjować List<Model> , istnieje kilka różnych sposobów na wykonanie tego.

var SelectedEmployees = new List<Model>
 {
      new Model() {Name = "Item1", Selected = true},
      new Model() {Name = "Item2", Selected = false},
      new Model() {Name = "Item3", Selected = false},
      new Model() {Name = "Item4"}
 };

Tutaj tworzymy kilka new instancji naszej klasy Model i inicjujemy je danymi. Co jeśli dodamy konstruktor?

public class Model
{

    public Model(string name, bool? selected = false)
    {
        Name = name;
        selected = Selected;
    }
    public string Name { get; set; }
    public bool? Selected { get; set; }
}

To pozwala nam nieco zainicjować naszą Listę.

var SelectedEmployees = new List<Model>
{
    new Model("Mark", true),
    new Model("Alexis"),
    new Model("")
};

Co z klasą, w której jedną z właściwości jest sama klasa?

public class Model
{
    public string Name { get; set; }
    public bool? Selected { get; set; }
}

public class ExtendedModel : Model
{
    public ExtendedModel()
    {
        BaseModel = new Model();
    }

    public Model BaseModel { get; set; }
    public DateTime BirthDate { get; set; }
}

Zauważ, że cofnęliśmy konstruktor klasy Model aby nieco uprościć przykład.

var SelectedWithBirthDate = new List<ExtendedModel>
{
    new ExtendedModel()
    {
        BaseModel = new Model { Name = "Mark", Selected = true},
        BirthDate = new DateTime(2015, 11, 23)
    },
                    new ExtendedModel()
    {
        BaseModel = new Model { Name = "Random"},
        BirthDate = new DateTime(2015, 11, 23)
    }
};

Zauważ, że możemy zamienić naszą List<ExtendedModel> z Collection<ExtendedModel> , ExtendedModel[] , object[] , a nawet po prostu [] .

Kolejka

W .Net znajduje się kolekcja używana do zarządzania wartościami w Queue która korzysta z koncepcji FIFO (pierwsze weszło pierwsze wyszło) . Podstawą kolejek jest metoda Enqueue(T item) która służy do dodawania elementów w kolejce i Dequeue() która służy do pobrania pierwszego elementu i usunięcia go z kolejki. Ogólnej wersji można użyć jak następującego kodu dla kolejki ciągów.

Najpierw dodaj przestrzeń nazw:

using System.Collections.Generic;

i użyj go:

Queue<string> queue = new Queue<string>();
queue.Enqueue("John");
queue.Enqueue("Paul");
queue.Enqueue("George");
queue.Enqueue("Ringo");

string dequeueValue;
dequeueValue = queue.Dequeue(); // return John
dequeueValue = queue.Dequeue(); // return Paul
dequeueValue = queue.Dequeue(); // return George
dequeueValue = queue.Dequeue(); // return Ringo

Istnieje nietypowa wersja tego typu, która działa z obiektami.

Przestrzeń nazw to:

using System.Collections;

Dodaj próbkę kodu do kolejki nieogólnej:

Queue queue = new Queue();
queue.Enqueue("Hello World"); // string
queue.Enqueue(5); // int
queue.Enqueue(1d); // double
queue.Enqueue(true); // bool
queue.Enqueue(new Product()); // Product object

object dequeueValue;
dequeueValue = queue.Dequeue(); // return Hello World (string)
dequeueValue = queue.Dequeue(); // return 5 (int)
dequeueValue = queue.Dequeue(); // return 1d (double)
dequeueValue = queue.Dequeue(); // return true (bool)
dequeueValue = queue.Dequeue(); // return Product (Product type)

Istnieje również metoda o nazwie Peek (), która zwraca obiekt na początku kolejki bez usuwania elementów.

Queue<int> queue = new Queue<int>();
queue.Enqueue(10);
queue.Enqueue(20);
queue.Enqueue(30);
queue.Enqueue(40);
queue.Enqueue(50);

foreach (int element in queue)
{
    Console.WriteLine(i);
}

Dane wyjściowe (bez usuwania):

10
20
30
40
50

Stos

W .Net znajduje się kolekcja służąca do zarządzania wartościami na Stack która wykorzystuje koncepcję LIFO (ostatnie wejście, pierwsze wyjście) . Podstawą stosów jest metoda Push(T item) która służy do dodawania elementów do stosu, a Pop() służy do pobrania ostatniego elementu i usunięcia go ze stosu. Ogólnej wersji można użyć jak następującego kodu dla kolejki ciągów.

Najpierw dodaj przestrzeń nazw:

using System.Collections.Generic;

i użyj go:

Stack<string> stack = new Stack<string>();
stack.Push("John");
stack.Push("Paul");
stack.Push("George");
stack.Push("Ringo");

string value;
value = stack.Pop(); // return Ringo
value = stack.Pop(); // return George
value = stack.Pop(); // return Paul
value = stack.Pop(); // return John

Istnieje nietypowa wersja tego typu, która działa z obiektami.

Przestrzeń nazw to:

using System.Collections;

I przykładowy kod niestandardowego stosu:

Stack stack = new Stack();
stack.Push("Hello World"); // string
stack.Push(5); // int
stack.Push(1d); // double
stack.Push(true); // bool
stack.Push(new Product()); // Product object

object value;
value = stack.Pop(); // return Product (Product type)
value = stack.Pop(); // return true (bool)
value = stack.Pop(); // return 1d (double)
value = stack.Pop(); // return 5 (int)
value = stack.Pop(); // return Hello World (string)

Istnieje również metoda o nazwie Peek (), która zwraca ostatni dodany element, ale bez usuwania go ze Stack .

Stack<int> stack = new Stack<int>();
stack.Push(10);
stack.Push(20);

var lastValueAdded = stack.Peek(); // 20

Możliwe jest iterowanie elementów na stosie i przestrzega kolejności stosu (LIFO).

Stack<int> stack = new Stack<int>();
stack.Push(10);
stack.Push(20);
stack.Push(30);
stack.Push(40);
stack.Push(50);

foreach (int element in stack)
{
   Console.WriteLine(element);
}

Dane wyjściowe (bez usuwania):

50
40
30
20
10

Korzystanie z inicjatorów kolekcji

Niektóre typy kolekcji można zainicjować w czasie deklaracji. Na przykład poniższa instrukcja tworzy i inicjuje numbers pomocą niektórych liczb całkowitych:

List<int> numbers = new List<int>(){10, 9, 8, 7, 7, 6, 5, 10, 4, 3, 2, 1};

Wewnętrznie kompilator C # faktycznie konwertuje tę inicjalizację na serię wywołań metody Add. W związku z tym możesz używać tej składni tylko w przypadku kolekcji, które faktycznie obsługują metodę Add .

Klasy Stack<T> i Queue<T> nie obsługują tego.

W przypadku złożonych kolekcji, takich jak klasa Dictionary<TKey, TValue> , które przyjmują pary klucz / wartość, można określić każdą parę klucz / wartość jako anonimowy typ na liście inicjalizatora.

Dictionary<int, string> employee = new Dictionary<int, string>()
     {{44, "John"}, {45, "Bob"}, {47, "James"}, {48, "Franklin"}};

Pierwszy element w każdej parze to klucz, a drugi to wartość.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow