샘플 코드는 다음과 같습니다.
namespace SampleListT
{
class Program
{
static void Main(string[] args)
{
//using System.Collections .Generic; List
//ArrayList 네임스페이스에서 System.Collections 사용
//둘 모두 목록 컬렉션을 구현하며, 하나는 일반 컬렉션이고 다른 하나는 일반 컬렉션이 아닙니다.
//다음으로 컬렉션에 Person 객체를 추가합니다
Person p1 = new Person( "aladdin" , 20);
Person p2 = new Person("zhao", 10);
Person p3 = new Person("jacky", 40);
//목록의 컨테이너 크기를 지정하지 않은 경우 기본값은 0입니다. 요소가 추가되는 한 자동으로 4로 확장됩니다. .5번째 요소를 추가하면 8이 되고, 9번째 요소를 추가하면 16이 됩니다
//확장할 때는 항상 기하급수적으로 늘어나는 것을 볼 수 있는데, 이는 메모리를 다시 열어야 한다는 것입니다. 요소의 개수를 미리 알고 있거나 가능한 개수라면 최대한 크게 trade-off 값을 주는 것이 가장 좋습니다
//요소를 3개 추가하고 컨테이너 크기를 4로 설정합니다. 참고: 4로 설정한다고 해서 4개의 요소만 배치할 수 있는 것은 아닙니다. 이를 초과하면 확장으로 인한 오버헤드를 최대화하기 위한 것입니다.
List
list.Add(p1);
list.Add(p2);
list.Add(p3);
//이 방법 예를 들어, 할당 크기가 100이고 나머지는 4개만 사용하면 낭비가 아닌가요?
//이 메서드가 호출되면 요소 수가 컨테이너 크기의 90% 이상을 차지하는 경우 재활용되지 않습니다.
list.TrimExcess();
//ArrayList 메소드는 List<>와 동일하게 사용됩니다. 차이점은 객체의 컬렉션이고 매개변수가 Object라는 점입니다. 목록을 사용해 보세요<>
//여기서 더 이상 데모는 없습니다
// 1 수집기를 초기화합니다
// C# 3.0부터 초기화 함수는 제공되나 응답이 없습니다. IL에서는 ADD 메소드로 변환하여
List
// 2 요소 추가 AddRange() 이 메서드는 여러 개체를 한 번에 추가할 수 있습니다.
List
//매개변수는 필수입니다. 삭제할 수 있는 객체는 배열일 수도 있습니다.
list.AddRange( new Person[] { new Person( "aladdin" ,20) , new Person("zhao", 6)});
//일괄 매개변수를 구성하고 전달하면 효과는 AddRange
List
// 3 요소 삽입
// Insert() 메소드를 사용하여 다음을 수행할 수 있습니다. 지정된 위치에 요소를 삽입합니다
// 예를 들어 1번 위치에 삽입하면 마지막이 됩니다. 알라딘 재키자오가 되었습니다.. 삽입한다는 것은 제가 이전에 이 위치를 차지했다는 의미입니다. 그 다음 사람은 모두 한 자리 뒤로 이동합니다
mylist.Insert( 1 , new Person( "jacky" , 88 ));
foreach(mylist의 사람 p)
{
Console.WriteLine(p.name);
}
// 4 요소 액세스
// ArrayList 및 List
Console.WriteLine ( "---요소 액세스 -- ----------");
for (int i = 0; i < mylist.Count; i++)
{
Console.WriteLine(mylist[i].name);
}
//할 수 있습니다 또한 이를 달성하기 위해 foreach를 사용하며 여기에는 예제가 제공되지 않습니다.
//Foreach 메서드 사용
//public 위임자 void Action
Console.WriteLine( "--- ---------------ForEach 메서드를 사용하여 출력------ -----------------------");
// 5개 요소 삭제
//RemoveAt() 값을 사용하여 요소 삭제를 인덱서에 직접 전달할 수 있음
//첫 번째 요소를 직접 삭제
mylist.RemoveAt( 0);
//삭제할 요소를 Remove 메소드에 전달할 수도 있습니다
Person per2 = new Person("zhao", 100);
Person per3 = new Person("jacky", 100);
lists2.Add(2개);
lists2.Add(3개);
foreach (Person per in listed2)
{
Console.WriteLine(per.name);
}
//Jacky라는 요소가 삭제된 결과를 확인할 수 있습니다.
//Remove 메소드의 삭제 과정을 살펴보겠습니다
// IndexOf 메소드를 사용하여 객체의 인덱스를 확인한 후, 인덱스에 따라 삭제합니다
// IndexOf 메소드에서는, 먼저 요소가 IEquatable 인터페이스를 구현하는지 확인합니다. 그렇다면 이 인터페이스에서 Equals 메서드를 호출하세요.
// 구현되지 않은 경우 Object에서 Equals 메서드를 호출하여 요소를 비교합니다(즉, 주소 비교)
// 위에서 per3을 삭제했는데, 주소가 있는 것이 확실해서 삭제했습니다
// 다음으로 Person을 수정하고 IEquatable
// 결과는 모두 3개입니다
// 개체를 삭제하려면 Remove 메서드를 사용하므로 인덱스를 사용하여 직접 삭제하는 것이 가장 좋습니다. 일련의 과정을 거쳐 인덱스에 따라 최종 삭제됩니다.
// A 범위를 삭제하려면 RemoveRange()
//첫 번째 매개변수 시작 위치의 두 번째 숫자
// lists2.RemoveRange( 1, 2);
//Console.WriteLine( "일괄 삭제 후------ -----------");
//foreach (목록에 있는 사람2)
//{
// Console.WriteLine(이름당);
//}
// 6 검색
// 검색하는 방법에는 여러 가지가 있습니다. IndexOf LastIndexOf FindIndex FindLasIndex Find FindLas를 사용하면 요소가 존재하는지 확인하려는 경우 Exists() 메서드를 사용할 수 있습니다.
//IndexOf() 메서드에는 개체가 필요합니다. 매개변수에 도달하면 컬렉션에 있는 요소의 인덱스를 반환합니다. 찾을 수 없으면 -1을 반환합니다. IndexOf는 IEquatable 인터페이스를 사용하여 요소를 비교할 수도 있습니다
List
Person person1 = new Person("aladdin", 100);
Person person2 = new Person("zhao ", 100);
Person person3 = new Person("jacky", 100);
ls3.Add(person1);
ls3.Add(person2);
ls3.Add(person3);
// 기본 주소 비교를 사용하기 위해 Person 인터페이스를 일시적으로 제거합니다
int index = ls3.IndexOf(person3);
Console.WriteLine( "index of per3 :" + index) / /2
// 세 번째부터 시작하도록 검색 범위를 지정할 수도 있습니다. 범위 길이는 1
int index2 = ls3.IndexOf(person3,2,1);
Console .WriteLine( index2);
//IEquatable 비교 방법은 이전에 작성되었으므로 예제는 제공되지 않습니다
//FindIndex() 메서드는 특정 특성을 가진 요소를 검색하는 데 사용됩니다
// 예 대리자를 매개변수로 사용 public 대리자 bool Predicate
int index3 = ls3.FindIndex(param => param.name.Equals("jacky"));
콘솔. WriteLine( index3 );// 2
// FindLastIndex는 뒤에서 나오는 첫 번째 요소를 검색합니다. 여기에는 반복되는 요소가 없으므로 하나만 찾고 중지하는 효과는 반영되지 않습니다.
int index4 = ls3.FindLastIndex(p => p.name.Equals("aladdin"));
Console.WriteLine(index4);
//Find 메서드는 FindIndex 메서드와 동일하게 사용되며, 차이점은 반환되는 것은 요소 자체라는 것입니다
Person ppp = ls3.Find( p => p.name.Equals("jacky")) ;
Console.WriteLine(ppp);
// 일치하는 모든 요소를 찾으려면 첫 번째 항목을 찾을 때 중지하는 대신 FindAll 메서드를 사용합니다.
// 연령이 100과 같고 그 중 3개가 일치하는 모든 개체를 찾습니다.
List
Console.WriteLine( "---------모두 찾기--- -----");
foreach(newList의 개인 p)
{
Console.WriteLine(p.name);
}
// 7 정렬
// 목록은 Sort 메서드를 사용하여 정렬할 수 있으며 구현 알고리즘은 빠른 정렬입니다
//이 메서드에는 여러 오버로드가 있습니다
//public void Sort(); /요소 메소드에 IComparable을 구현한 경우에만 사용할 수 있으며, 구현한 경우 직접 sort를 한 번 호출하면 순서가 정렬됩니다.
//public void Sort(Comparison
//public void Sort(IComparer
//public void Sort(int index, int count, IComparer
List
Person person4 = new Person("aladdin", 100);
Person person5 = new Person("zhao", 33);
Person person6 = new Person(" jacky", 44);
ls4 .Add(person4);
ls4.Add(person5);
ls4.Add(person6);
ls4.Sort(MyComparFunc );
Console.WriteLine( "--- ----------정렬-------------");
foreach(사람 p in ls4)
{
Console .WriteLine(p.name+ p.age );
}
Console.WriteLine( "---------순서를 반대로-- ------------ ----");
ls4.Reverse();
foreach(ls4의 개인 p)
{
콘솔. WriteLine(p.name+p.age);
}
// 8 유형 변환
//컬렉션의 요소를 모든 유형의 요소로 변환할 수 있습니다. 예를 들어 컬렉션의 Person을 Racer 개체로만 변환하려고 합니다. 이름 및 나이 없음
// 공개 List
// 공개 위임 TOutput Converter
List
Console.WriteLine( "--------- --변환된 항목---------");
foreach(Racer r in ls5)
{
Console.WriteLine(r.name);
}
// 9 읽기 전용 컬렉션
// 컬렉션이 생성된 후에는 읽기 및 쓰기가 가능해야 합니다. 그러나 그렇지 않은 경우 새 요소를 추가할 수 없습니다. 채워져 있으면 수정하지 마세요.
// 읽기 전용 컬렉션을 사용할 수 있으며, List<> 작업과 동일한 ReadOnlyCollection
// 일반적인 ADD 및 기타 메서드를 차단합니다
ReadOnlyCollection
Console.WriteLine("읽기 전용 컬렉션 출력");
foreach(persss의 Racer r)
{
Console.WriteLine(r.name);
}
Console.ReadLine();
}
//비교를 위해 작성된 위임 구현 방법
public static int MyComparFunc(Person p1, Person p2)
{
if (p1.age == p2.age)
{
return 0;
}
else if (p1.age > p2.age)
{
return 1;
}
else
{
return -1;
}
}
}
//두 개의 도우미 클래스
class Person //:IEquatable
{
public string name;
public int age;
public Person( string name, int age)
{
this.name = name;
this.age = age; >
////항상 False 값을 제공합니다
//{
// false를 반환합니다. ;
//}
}
class Racer
{ 공개 문자열 이름;
공개 Racer(문자열 이름)
this.name= name;
}
}
}
C# 일반 목록 List