다음을 통해 공유


C에서 목록<T> 사용하여 데이터 수집을 관리하는 방법 알아보기#

이 소개 자습서에서는 C# 언어 및 클래스의 기본 사항을 소개합니다.

이 자습서에서는 브라우저를 사용하여 C# 코드를 작성하고 코드를 컴파일하고 실행한 결과를 확인하여 C#을 대화형으로 설명합니다. 컬렉션 및 배열을 만들고 수정하고 탐색하는 일련의 단원을 포함합니다. 주로 List<T> 클래스로 작업합니다.

기본 목록 예제

코드 조각 블록에 "실행" 단추가 포함된 경우 해당 단추는 대화형 창을 열거나 대화형 창의 기존 코드를 바꿉니다. 코드 조각에 "실행" 단추가 포함되지 않은 경우 코드를 복사하여 현재 대화형 창에 추가할 수 있습니다.

대화형 창에서 다음 코드를 실행합니다. <name>을 자신의 이름으로 바꾼 후 을 선택하고을 실행하세요.

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

문자열 목록을 만들고, 해당 목록에 세 개의 이름을 추가하고, 모든 CAPS에 이름을 인쇄했습니다. 이전 자습서에서 배운 개념을 사용하여 목록을 반복합니다.

이름을 표시하는 코드는 문자열 보간 기능을 사용합니다. $ 문자를 사용하여 string 앞에 오는 경우 문자열 선언에 C# 코드를 포함할 수 있습니다. 실제 문자열은 C# 코드가 생성한 값으로 대체됩니다. String.ToUpper 메서드를 호출했기 때문에, 이 예제에서는 {name.ToUpper()}를 각 이름으로 바꾸며, 각 이름은 대문자로 변환됩니다.

계속 살펴보겠습니다.

목록 내용 수정

만든 컬렉션은 List<T> 형식을 사용합니다. 이 형식은 요소의 시퀀스를 저장합니다. 꺾쇠 괄호 사이의 요소 타입을 지정합니다.

List<T> 형식의 중요한 측면 중 하나는 요소를 추가하거나 제거할 수 있도록 확장하거나 축소할 수 있다는 것입니다. 콘텐츠를 표시한 후 내용을 수정하여 결과를 볼 수 있습니다. 이미 작성한 코드(내용을 인쇄하는 루프) 다음에 다음 코드를 추가합니다.

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

목록 끝에 두 개의 이름을 더 추가했습니다. 당신도 하나 제거했습니다. 이 코드 블록의 출력은 초기 내용을 표시한 다음 빈 줄과 새 콘텐츠를 인쇄합니다.

List<T>을(를) 사용하면 인덱스로 개별 항목을 참조할 수도 있습니다. [] 토큰을 사용하여 항목에 액세스합니다. 이미 작성한 코드 다음에 다음 코드를 추가하고 사용해 보세요.

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

목록의 끝을 지나서 액세스할 수 없습니다. 목록에서 Count 속성을 사용하는 기간을 확인할 수 있습니다. 다음 코드를 추가합니다.

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

다시 선택하여 결과를 확인합니다. C#에서 인덱스는 0부터 시작하므로 가장 큰 유효한 인덱스는 목록의 항목 수보다 1보다 작습니다.

목록 검색 및 정렬

샘플에서는 비교적 작은 목록을 사용하지만 애플리케이션에서 더 많은 요소가 포함된 목록을 만들 수 있으며, 때로는 수천 개의 번호가 매겨질 수도 있습니다. 이러한 더 큰 컬렉션에서 요소를 찾으려면 목록에서 다른 항목을 검색해야 합니다. IndexOf 메서드는 항목을 검색하고 항목의 인덱스가 반환됩니다. 항목이 목록에 없으면 IndexOf-1반환합니다. 작동 방식을 확인해 보세요. 지금까지 작성한 내용 다음에 다음 코드를 추가합니다.

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

항목이 목록에 있는지 알 수 없으므로 항상 IndexOf반환된 인덱스도 확인해야 합니다. 만약 -1이라면, 해당 항목을 찾을 수 없습니다.

목록의 항목도 정렬할 수 있습니다. Sort 메서드는 목록의 모든 항목을 일반 순서로 정렬합니다(문자열의 경우 사전순). 이 코드를 추가하고 다시 실행합니다.

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

다른 형식의 목록

지금까지 목록에서 string 형식을 사용했습니다. 다른 형식을 사용하여 List<T> 만들어 보겠습니다. 숫자 집합을 빌드해 보겠습니다. 지금까지 작성한 코드를 삭제하고 다음 코드로 바꿉다.

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

정수 목록을 만들고 처음 두 정수는 값 1로 설정합니다. 숫자 시퀀스인 피보나치 시퀀스두 개의 1로 시작합니다. 각각의 다음 피보나치 번호는 이전 두 숫자의 합계를 복용하여 발견된다. 다음 코드를 추가합니다.

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

fibonacciNumbers.Add(previous + previous2);

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

실행 눌러 결과를 확인합니다.

도전

이 단원과 이전 단원의 몇 가지 개념을 함께 사용할 수 있는지 확인합니다. 피보나치 숫자로 지금까지 빌드한 내용을 확장합니다. 시퀀스에서 처음 20개의 숫자를 생성하는 코드를 작성해 봅니다. (힌트로, 20 피보나치 번호는 6765입니다.)

이런 식으로 생각해 왔나요?

:::code language="csharp" interactive="try-dotnet-method" source="./snippets/ListCollection/Program.cs" id="Answer":::

루프를 반복할 때마다 목록에서 마지막 두 정수를 가져와 합계를 계산하고 해당 값을 목록에 추가합니다. 목록에 20개의 항목을 추가할 때까지 루프가 반복됩니다.

C# 대화형 자습서의 최종 소개인 '목록 대화형 자습서'를 완료했습니다. .NET 사이트 방문하여 .NET SDK를 다운로드하고, 머신에 프로젝트를 만들고, 코딩을 계속할 수 있습니다. "다음 단계" 섹션에서는 이러한 자습서로 돌아갑니다.

다음 문서에서 .NET 컬렉션에 대해 자세히 알아볼 수 있습니다.

축하합니다. 목록 자습서를 완료했습니다. 사용자 고유의 개발 환경에서 더 많은 자습서를 계속 진행할 수 있습니다.

컬렉션 .NET 기본 사항 문서에서 List 형식을 사용하는 방법에 대해 자세히 알아볼 수 있습니다. 또한 다른 많은 컬렉션 형식에 대해서도 알아봅니다.