컬렉션은 OOP에서 중요한 개념이며, C#에서 컬렉션에 대한 포괄적인 지원은 언어의 본질 중 하나입니다.
일반 컬렉션을 사용하는 이유는 무엇인가요?
C# 2.0 이전에는 컬렉션을 구현하는 두 가지 주요 방법이 있었습니다.
a. ArrayList
를 사용하여 개체를 ArrayList에 직접 넣을 수 있지만 그 이유는 다음과 같습니다. 항목은 Object 유형이므로 사용할 때마다 지루한 유형 변환을 수행해야 합니다.
b. 사용자 정의 컬렉션 클래스 사용
일반적인 접근 방식은 CollectionBase 추상 클래스에서 사용자 정의 클래스를 상속하고 IList 개체를 캡슐화하여 강력한 형식의 컬렉션을 구현하는 것입니다. 이 방법을 사용하려면 각 컬렉션 유형에 해당하는 사용자 정의 클래스를 작성해야 하므로 많은 작업량이 필요합니다. 일반 컬렉션의 출현으로 위의 문제가 더 잘 해결되었습니다. 지정된 유형의 컬렉션을 만드는 데 코드 한 줄만 있으면 됩니다.
제네릭이란 무엇입니까?
제네릭은 일련의 유사한 문제를 해결하는 데 주로 사용되는 C# 2.0의 새로운 요소(C++에서는 템플릿이라고 함)입니다. 이 메커니즘을 사용하면 클래스 이름을 매개변수로 일반 유형에 전달하고 해당 객체를 생성할 수 있습니다. 제네릭(클래스, 인터페이스, 메서드, 대리자 등 포함)을 템플릿으로 생각하는 것이 더 나을 수 있습니다. 템플릿의 변형 부분은 매개 변수로 전달된 클래스 이름으로 대체되어 새로운 유형 정의를 얻습니다. 제네릭은 상대적으로 큰 주제이므로 여기에서는 자세히 분석하지 않습니다. 관심 있는 사람은 관련 정보를 참조할 수 있습니다.
일반 컬렉션을 만드는 방법은 무엇입니까?
주로 System.Collections.Generic 네임스페이스 아래의 List
Person 클래스를 다음과 같이 정의합니다.
보시다시피 일반 컬렉션은 컬렉션 구현 코드를 크게 단순화하여 지정된 유형의 컬렉션을 쉽게 생성할 수 있습니다. 그뿐만 아니라 일반 컬렉션은 더 강력한 기능도 제공합니다. 정렬 및 검색을 살펴보겠습니다.
List
"T"는 사용되는 유형이며 문자열, int, 또는 사용자 정의 유형입니다. 아래에서 구체적인 예를 살펴보겠습니다.
class Person
{
private string _name; //이름
private int _age;
//Person 객체 생성
public Person(string Name, int Age)
{
this._name= Name;
this._age = 나이;
}
//이름
public string Name
{
get { return _name; }
}
//Age
public int Age
{
get { return _age }
}
}
//Person 객체 생성
Person p1 = new Person("Zhang San", 30);
Person p2 = new Person("lee思", 20);
Person p3 = new Person("王五", 50);
//Person 유형의 객체 컬렉션 생성
List
//Person 객체를 컬렉션에 넣습니다
persons.Add(p1);
people.Add(p2);
persons.Add(p3);
//두 번째 사람의 이름을 출력
Console.Write(persons[1]. 이름);
일반 컬렉션 정렬
정렬은 비교를 기반으로 합니다. 예를 들어, 두 개의 숫자 1과 2가 있습니다. 이를 정렬하려면 먼저 두 숫자를 비교하고 비교 결과에 따라 정렬해야 합니다. 개체를 비교하려는 경우 상황은 좀 더 복잡합니다. 예를 들어 Person 개체를 비교하는 경우 이름이나 나이별로 비교할 수 있으므로 비교 규칙을 결정해야 합니다. 객체에는 여러 비교 규칙이 있을 수 있지만 객체를 정의하는 클래스에 배치되는 기본 규칙은 하나만 있을 수 있습니다. 기본 비교 규칙은 IComparable
class Person: IComparable
{
//연령별 비교
public int CompareTo(Person p )
{
return this.Age - p.Age;
}
}
CompareTo 메서드의 매개 변수는 다음과 같습니다. 동일한 유형의 다른 객체와 비교하여 반환 값은 int 유형입니다. 반환 값이 0보다 크면 첫 번째 객체가 두 번째 객체보다 크다는 의미입니다. , 이는 첫 번째 개체가 두 번째 개체보다 작다는 것을 의미합니다. 0을 반환하면 두 개체가 동일합니다.
기본 비교 규칙을 정의한 후 아래와 같이 매개 변수 없이 Sort 메서드를 통해 컬렉션을 정렬할 수 있습니다.
//기본 규칙에 따라 컬렉션 정렬
사람.정렬();
//소유자 이름 출력
foreach(Person p 명)
{
Console.WriteLine(p.Name) //출력 순서는 " Li Si", "Zhang San", "Wang Wu"
}
실제 사용에서는 다양한 규칙에 따라 집합을 정렬해야 하는 경우가 많으며, 이로 인해 다른 항목을 정의해야 합니다. 비교 규칙은 IComparer
class NameComparer: IComparer
{
//스토리지 정렬기 인스턴스
public static NameComparer Default = new NameComparer();
//이름으로 비교
public int Compare(Person p1, 사람 p2)
{
return System.Collections.Comparer.Default.Compare(p1.Name, p2.Name);
}
}
Compare 메서드의 매개 변수는 비교할 동일한 유형의 두 개체이며 반환 값은 int 유형이며 반환 값 처리 규칙은 CompareTo 메서드와 동일합니다. 그 중 Comparer.Default는 동일한 유형의 두 개체를 비교하기 위해 내장된 Comparer 개체를 반환합니다.
다음으로 새로 정의된 비교자를 사용하여 컬렉션을 정렬합니다.
위임을 통해 컬렉션을 정렬할 수도 있습니다. 먼저 위임이 매장 비교 규칙을 호출하는 방법을 정의해야 합니다. 정적 메소드를 사용할 수 있습니다. 다음 코드를 살펴보십시오. 그런 다음 내장된 일반 대리자를 통해 컬렉션을 정렬합니다. System.Comparison
후자의 두 메서드는 지정된 규칙에 따라 컬렉션을 정렬할 수 있지만, 작성자 위임 방법을 선호한다면 클래스에 다양한 비교 규칙을 넣은 다음 유연하게 호출하는 것을 고려해 볼 수 있습니다.
//이름별로 컬렉션 정렬
persons.Sort(NameComparer.Default);
//모든 사람의 이름 출력
foreach(Person p in 명)
{
Console.WriteLine(p.Name); //출력 순서는 "lee思", "王五", "张三"
}class PersonComparison
{
//이름별 비교
public static int Name(Person p1, Person p2)
{
Return system.Collections.comparer.Default.compare (p1.name, p2.name);}
}>
메소드의 매개변수를 비교해야 합니다. 동일한 유형인 경우 반환 값은 int 유형이며 반환 값 처리 규칙은 CompareTo 메서드와 동일합니다.
System.Comparison
persons.Sort(NameComparison);
//모두 출력 사람 이름
foreach(Person p 명)
{
Console.WriteLine(p.Name); //출력 순서는 "lee思", "王五" ","Zhang San"
}
보시다시피 후자의 두 가지 방법은 지정된 규칙에 따라 컬렉션을 정렬할 수 있지만 작성자는 위임 방법을 선호합니다. 각각의 비교 규칙을 클래스에 넣은 다음 유연하게 호출하는 것을 고려할 수 있습니다.
일반 컬렉션 검색
검색은 컬렉션에서 특정 조건을 충족하는 항목을 찾는 것입니다. 필요에 따라 여러 검색 조건을 정의하고 호출할 수 있습니다. 먼저 검색 조건을 다음과 같이 정의합니다.
class PersonPredicate
{
//중년(40세 이상) 찾기
public static bool MidAge(Person p)
{
if (p.Age >= 40)
return true;
else
return false; 항목은 true를 반환하고 그렇지 않으면 false를 반환합니다.
System.Predicate
List
//중년의 이름을 모두 출력
foreach (Person p in MidAgePersons)
{
Console.WriteLine(p.Name) // 출력 "Wang Wu"
} 그런 다음 내장된 일반 대리자 System.Predicate
일반 컬렉션의 확장
컬렉션에 있는 모든 사람의 이름을 쉼표로 구분하여 얻으려면 어떻게 해야 합니까?
단일 클래스가 제공할 수 있는 기능이 제한되어 있다는 점을 고려하면 List
//Persons 컬렉션 클래스 정의
class Persons: List
{
//모두 가져오기 컬렉션의 항목 Person's name
public string GetAllNames()
{
if (this.Count == 0)
return "";
문자열 값 = "";
Foreach(P인)
{
Val + = p.Name + ","
}
return val.Substring(0, val.Length - 1); >
Persons PersonCol = new Persons();PersonCol.Add(p1) ;PersonCol.Add(p2);PersonCol.Add(p3) ;//모든 사람의 이름 출력Console.Write(PersonCol. GetAllNames()); //"Zhang San, Li Si, Wang Wu" 출력 목록 메서드 및 속성 메서드 또는 속성 함수 용량은 요소 수를 가져오거나 설정하는 데 사용됩니다. 목록은 수용할 수 있습니다. 이 값은 수량이 용량을 초과하면 자동으로 증가합니다. 이 값을 설정하여 용량을 줄이거나, trin() 메서드를 호출하여 실제 요소 수에 맞게 용량을 줄일 수 있습니다. 배열의 현재 요소 수를 가져오는 데 사용되는 Count 속성 Item() 인덱스를 지정하여 요소를 가져오거나 설정합니다. List 클래스의 경우 인덱서입니다. List에 객체를 추가하는 Add() 공용 메서드List 끝에 ICollection 인터페이스를 구현하는 여러 요소를 추가하는 AddRange() 공용 메서드 BinarySearch( ) 정렬된 목록에서 지정된 요소를 찾기 위해 이진 검색을 사용하는 데 사용되는 오버로드된 공용 메서드입니다. Clear( ) 목록의 모든 요소를 제거합니다. Contains( ) 요소 테스트 목록에 있습니다CopyTo() 오버로드된 공개 메소드, 목록을 1차원 배열로 복사Exists() 요소가 목록에 있는지 테스트 Find() 목록에서 일치하는 첫 번째 요소를 찾아 반환합니다FindAll() 목록에서 일치하는 모든 요소를 찾아 반환합니다GetEnumerator() 오버로드된 공용 메서드, 목록 반복을 위한 열거자를 반환합니다. Getrange() 지정된 범위의 요소를 새 목록에 복사IndexOf() 일치하는 각 요소를 찾아 반환하는 오버로드된 공용 메서드 IndexInsert() 삽입 요소를 목록에 추가InsertRange() 목록에 요소 그룹 삽입LastIndexOf() 오버로드된 공개 메서드, 검색하고 마지막으로 일치하는 요소의 인덱스를 반환합니다 Remove( )는 지정된 요소와 일치하는 첫 번째 요소를 제거합니다 RemoveAt( )는 지정된 인덱스를 가진 요소를 제거합니다 RemoveRange( ) 지정된 범위의 요소를 제거합니다Reverse ( ) List의 요소 순서를 뒤집습니다Sort( ) List의 요소 정렬ToArray( ) List의 요소를 새 배열로 복사합니다 trimToSize( ) 용량을 목록의 실제 요소 수로 설정 요약: 이 기사에서는 C# 사용을 소개하는 데 중점을 둡니다. 2.0의 Generics는 컬렉션을 구현하고 컬렉션을 확장하는 데 사용됩니다. 함수를 적절하게 사용하면 반복적인 작업을 많이 줄이고 개발 효율성을 크게 높일 수 있습니다. 실제로 컬렉션은 제네릭의 일반적인 응용 프로그램일 뿐입니다. 제네릭에 대해 더 알고 싶다면 다른 관련 정보를 확인하세요. 이 글이 여러분에게 도움이 되었으면 좋겠습니다 C# 목록 사용법과 관련된 더 많은 글은 PHP 중국어를 참고해주세요 웹사이트!
이 기사는 C의 Null 포인터 단축의 도전에 대해 탐구합니다. 그것은 문제가 그 자체가 아니라 오용한다고 주장합니다. 이 기사는 사전 수준 점검, 포인터 이니셜을 포함한 수반을 방지하기위한 모범 사례에 대해 자세히 설명합니다.

이 기사에서는 printf 내에서 \ n 탈출 시퀀스를 사용하여 C에서 Newline 문자를 만드는 방법을 설명하고 함수를 넣습니다. 기능을 자세히 설명하고 출력에서 라인 브레이크 사용을 보여주는 코드 예제를 제공합니다.

이 기사는 초보자가 C 컴파일러를 선택하도록 안내합니다. GCC는 사용 편의성, 광범위한 가용성 및 광범위한 리소스로 인해 초보자에게 가장 적합하다고 주장합니다. 그러나 GCC, Clang, MSVC 및 TCC도 비교하여 차이를 강조합니다.

이 기사는 현대 C 프로그래밍에서 NULL의 지속적인 중요성을 강조합니다. 발전에도 불구하고 NULL은 명시적인 포인터 관리에 중요하며, 유효한 메모리 주소가 없음을 표시하여 세분화 결함을 방지합니다. 최고의 PRAC

이 기사에서는 초보자를위한 온라인 C 컴파일러를 검토하여 사용 편의성 및 디버깅 기능에 중점을 둡니다. OnlineGDB 및 Repl.it는 사용자 친화적 인 인터페이스 및 유용한 디버깅 도구를 위해 강조 표시됩니다. 프로그램 및 컴파일과 같은 다른 옵션

이 기사는 온라인 C 프로그래밍 플랫폼을 비교하여 디버깅 도구, IDE 기능, 표준 컴플라이언스 및 메모리/실행 제한과 같은 기능의 차이점을 강조합니다. "최고의"플랫폼은 사용자의 요구에 달려 있다고 주장합니다.

이 기사에서는 C IDE의 효율적인 코드 복사에 대해 설명합니다. 복사는 컴파일러 기능이 아닌 IDE 기능이며 IDE 선택 도구 사용, 코드 폴딩, 검색/교체, Templa를 포함하여 효율성 향상을위한 세부 사항 전략을 강조합니다.

이 기사는 C 프로그램 컴파일에서 누락 된 출력 창을 문제 해결합니다. 실행 가능, 프로그램 오류, 잘못된 컴파일러 설정, 백그라운드 프로세스 및 빠른 프로그램 종료와 같은 원인을 검사합니다. 솔루션은 ch


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구
