소유 네임스페이스: System.Collections.Generic
공용 클래스 List
List ;Class는 ArrayList 클래스와 일반적으로 동일합니다. 이 클래스는 필요에 따라 크기를 동적으로 늘릴 수 있는 배열을 사용하여 IList
제네릭의 이점: C# 언어를 사용하여 객체 지향 프로그램을 작성하는 데 뛰어난 효율성과 유연성을 추가합니다. 값 유형의 강제 박싱 및 언박싱 또는 참조 유형의 다운캐스팅이 없으므로 성능이 향상됩니다.
성능 참고 사항:
IList
IList
" ArrayList에 추가된 모든 참조 또는 값 유형은 암시적으로 Object로 캐스트됩니다. 항목이 값 유형인 경우 목록에 추가할 때 boxing해야 하며 Unboxing 작업은 동안 수행됩니다. 캐스트, 박싱 및 언박싱 작업은 모두 성능을 저하시킵니다. 대규모 컬렉션을 반복해야 하는 상황에서는 박싱 및 언박싱의 영향이 중요합니다. ”
1. 🎜>
1. List
T는 목록의 요소 유형입니다. 이제 문자열 유형을 예로 들어보겠습니다.
예: List
2. List
🎜>목록 만들기
string[] temArr = { "Ha", "Hunter", "Tom", "Lily", "Jay", "Jim" , "Kuku", "Locu" };
List
요소 추가:
1. Add(T 항목) 요소 추가
string[] temArr = { "Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku" , "Locu" };
mList.AddRange(temArr);
3. Insert(int index, T item); 인덱스 위치에 요소를 추가합니다
foreach (T element in mList) T的类型与mList声明时一样 { Console.WriteLine(element); }
foreach (string s in mList) { Console.WriteLine(s); }
1. List.Remove(T 항목)는 값을 삭제합니다
예: mList.RemoveAt(0);
3. List.RemoveRange(int index, int count);
아래 첨자 인덱스에서 시작, 개수 요소 삭제
예: mList.RemoveRange(3, 2);
요소가 목록에 있는지 확인:
List.Contains(T item ) 매우 실용적임
예:
if (mList.Contains("Hunter")) { Console.WriteLine("There is Hunter in the list"); } else { mList.Add("Hunter"); Console.WriteLine("Add Hunter successfully."); }
목록의 요소 정렬:
목록 정렬() 기본값은 목록에 있는 요소의 첫 글자입니다. 오름차순
예: mList.Sort();
목록의 요소 순서를 뒤집는 경우:
List.Reverse() List Sort와 함께 사용할 수 있습니다. ()는 원하는 효과를 얻기 위해 함께 사용됩니다
예: mList.Sort();
List Clear: List.Clear ()
예: mList.Clear() ;
목록의 요소 수 가져오기:
List.Count () int 값 반환
예:
int count = mList.Count();Console.WriteLine("목록의 요소 수: " +count);
2. List의 고급화되고 강력한 방법:
예제에서 사용된 목록:
string[] temArr = { 하","헌터", "톰", "릴리", "제이", "짐", "쿠쿠", " "로쿠" };
mList.AddRange ( temArr);
List.Find 메서드: 지정된 조건자에 정의된 조건과 일치하는 요소를 검색하고 전체 목록에서 첫 번째로 일치하는 요소를 반환합니다.
public T Find(Predicate
Predicate는 메서드에 대한 대리자입니다. 전달된 개체가 대리자에 정의된 조건과 일치하면 메서드는 true를 반환합니다. 현재 목록의 요소는 Predicate 대리자에게 하나씩 전달되고 목록에서 앞으로 이동하며 첫 번째 요소부터 시작하여 마지막 요소로 끝납니다. 일치하는 항목이 발견되면 처리가 중지됩니다.
술어를 함수 또는 람다 식에 위임할 수 있습니다.
람다 식에 위임:
예:
string listFind = mList.Find(name => //name是变量,代表的是mList { //中元素,自己设定 if (name.Length > 3) { return true; } return false; }); Console.WriteLine(listFind); //输出是Hunter
위임 함수 제공:
E.g.:
string listFind1 = mList.Find(ListFind); //委托给ListFind函数
Console.WriteLine(listFind); //输出是Hunter
ListFind函数:
public bool ListFind(string name) { if (name.Length > 3) { return true; } return false; }
用法与List.Find相同。
List.TrueForAll方法: 确定是否 List 中的每个元素都与指定的谓词所定义的条件相匹配。
public bool TrueForAll(Predicate
委托给拉姆达表达式:
E.g.:
bool flag = mList.TrueForAll(name => { if (name.Length > 3) { return true; } else { return false; } } ); Console.WriteLine("True for all: "+flag); //flag值为false
委托给一个函数,这里用到上面的ListFind函数:
E.g.:
bool flag = mList.TrueForAll(ListFind); //委托给ListFind函数
Console.WriteLine("True for all: "+flag); //flag值为false
这两种方法的结果是一样的。
List.FindAll方法:检索与指定谓词所定义的条件相匹配的所有元素。
public List
E.g.:
List<string> subList = mList.FindAll(ListFind); //委托给ListFind函数 foreach (string s in subList) { Console.WriteLine("element in subList: "+s); }
这时subList存储的就是所有长度大于3的元素
List.Take(n): 获得前n行 返回值为IEnumetable
E.g.:
IEnumerable<string> takeList= mList.Take(5); foreach (string s in takeList) { Console.WriteLine("element in takeList: " + s); }
这时takeList存放的元素就是mList中的前5个
List.Where方法:检索与指定谓词所定义的条件相匹配的所有元素。跟List.FindAll方法类似。
E.g.:
IEnumerable<string> whereList = mList.Where(name => { if (name.Length > 3) { return true; } else { return false; } }); foreach (string s in subList) { Console.WriteLine("element in subList: "+s); }
这时subList存储的就是所有长度大于3的元素
List.RemoveAll方法:移除与指定的谓词所定义的条件相匹配的所有元素。
public int RemoveAll(Predicate
E.g.:
mList.RemoveAll(name => { if (name.Length > 3) { return true; } else { return false; } }); foreach (string s in mList) { Console.WriteLine("element in mList: " + s); }
这时mList存储的就是移除长度大于3之后的元素。
List
比如
List
intList.Add(34); //添加
intList.Remove(34);//删除
intList.RemoveAt(0); //删除位于某处的元素
intList.Count; //链表长度
还有Insert,Find,FindAll,Contains等方法,也有索引方法 intList[0] = 23;
1.减少了装箱拆箱
2.便于编译时检查数据类型
List
更多C# List