수색…


비고

컬렉션에는 여러 가지 종류가 있습니다.

  • Array
  • List
  • Queue
  • SortedList
  • Stack
  • 사전

사용자 정의 유형으로 초기화 된 목록 만들기

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

여기에는 두 개의 속성을 가진 생성자가없는 클래스가 있습니다. Name 및 nullable 부울 속성 Selected . List<Model> 을 초기화하고 싶다면이를 실행하는 몇 가지 다른 방법이 있습니다.

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

여기에서는 Model 클래스의 new 인스턴스를 여러 개 만들고 데이터로 초기화합니다. 생성자를 추가하면 어떻게 될까요?

public class Model
{

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

이렇게하면 목록을 조금 다르게 초기화 할 수 있습니다.

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

속성 중 하나가 클래스 자체 인 클래스는 어떻습니까?

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

예제를 약간 단순화하기 위해 Model 클래스의 생성자를 되돌려 놓았습니다.

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

List<ExtendedModel>Collection<ExtendedModel> , ExtendedModel[] , object[] 또는 단순히 [] 교환 할 수 있습니다.

FIFO (first-in first-out) 개념을 사용하는 Queue 값을 관리하는 데 사용되는 .Net의 컬렉션이 있습니다. 대기열의 기본은 대기열에 요소를 추가하는 데 사용되는 Enqueue(T item) 메소드와 첫 번째 요소를 가져 와서 대기열에서 제거하는 데 사용되는 Dequeue() 메소드입니다. 제네릭 버전은 문자열 대기열에 대해 다음 코드와 같이 사용할 수 있습니다.

먼저 네임 스페이스를 추가합니다.

using System.Collections.Generic;

그것을 사용하십시오 :

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

객체와 함께 작동하는 유형의 일반이 아닌 버전이 있습니다.

네임 스페이스는 다음과 같습니다.

using System.Collections;

일반이 아닌 대기열에 대한 코드 샘플 제출 :

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)

요소를 제거하지 않고 큐의 시작 부분에서 오브젝트를 리턴하는 Peek () 메소드도 있습니다.

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

출력 (제거하지 않음) :

10
20
30
40
50

스택

LIFO (후입 선출법) 개념을 사용하는 Stack 에서 값을 관리하는 데 사용되는 .NET의 컬렉션이 있습니다. 스택의 기본은 스택에 요소를 추가하는 데 사용되는 Push(T item) 와 추가 된 마지막 요소를 가져 와서 스택에서 제거하는 데 사용되는 Pop() 입니다. 제네릭 버전은 문자열 대기열에 대해 다음 코드와 같이 사용할 수 있습니다.

먼저 네임 스페이스를 추가합니다.

using System.Collections.Generic;

그것을 사용하십시오 :

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

객체와 함께 작동하는 유형의 일반이 아닌 버전이 있습니다.

네임 스페이스는 다음과 같습니다.

using System.Collections;

그리고 비 제네릭 스택의 코드 샘플 :

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)

추가 된 마지막 요소를 Stack 에서 제거하지 않고 반환하는 Peek () 메서드도 있습니다.

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

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

스택의 요소를 반복 할 수 있으며 스택의 순서 (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);
}

출력 (제거하지 않음) :

50
40
30
20
10

컬렉션 초기화 도구 사용

일부 콜렉션 유형은 선언시에 초기화 될 수 있습니다. 예를 들어, 다음 명령문은 정수를 생성하고 numbers 를 초기화합니다.

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

내부적으로 C # 컴파일러는 실제로이 초기화를 일련의 Add 메서드 호출로 변환합니다. 결과적으로 Add 메서드를 실제로 지원하는 컬렉션에만이 구문을 사용할 수 있습니다.

Stack<T>Queue<T> 클래스는이 클래스를 지원하지 않습니다.

키 / 값 쌍을 취하는 Dictionary<TKey, TValue> 클래스와 같은 복잡한 컬렉션의 경우 이니셜 라이저 목록에서 각 키 / 값 쌍을 익명 형식으로 지정할 수 있습니다.

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

각 쌍의 첫 번째 항목은 키이고 두 번째 항목은 값입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow