ホームページ >バックエンド開発 >C#.Net チュートリアル >C# コンテナー クラス、インターフェイス、パフォーマンスの詳細な紹介
[] 宣言された変数は固定長でなければなりません、つまり、長さは静的です; object[] objectArray = new object[10]、つまり、メモリ内のみ アドレス値を割り当て、この時点では各項目は null 参照です
応用例
AdjustablePanel[] adjustPanelArrays = new AdjustablePanel[12]; foreach (Control ultraControl in this.Controls) { if (ultraControl.GetType() == typeof(UltraGrid) || ultraControl.GetType() == typeof(UltraChart) || ultraControl.GetType() == typeof(Panel)) { //adjustPanelArrays[index]此时为null,因此会出现null引用bug adjustPanelArrays[index].Controls.Add(ultraControl); } }2 Array
operation、search、sortを提供します。 array メソッドなので、共通言語ランタイムのすべての配列の基本クラスとして機能します。 長さは固定されており、要求に応じて動的に増やすことはできません; Array は抽象クラスであり、新しい Array を使用して作成することはできません; GetValue は object 型を返します。 Array myArray = Array.CreateInstance(typeof(int),3);
myArray.SetValue(1,0);
myArray.SetValue(2,1);
myArray.SetValue(3,2); //GetValue返回的是object类型,需要进行类型提升为int
int val2 = (int)myArray.GetValue(2);
3 ArrayList サイズをオンデマンドで動的に増加でき、任意の型に対応する配列を使用して IList インターフェイスを実装します。
ArrayList al = new ArrayList(); ArrayList arrayList = new ArrayList(); al.Add("qaz"); al.Add(1); al.Add(new List<object>()); string str = (string)al[0]; int intval = (int)al[1]; List<object> objs = (List<object>)al[2];
概要 []、配列はコンパイル前に長さを知る必要があり、静的であり、型は一意に決定される必要があり、作成には Array.CreateInstance(); が必要です。 ArrayList 長さはコンパイル時には不明で、動的であり、追加される要素は異なるタイプである可能性があります。
4 リスト API
4-1 概要T
Add(obj)
AddRange(objList)例:
private List<int> intList = new List<int>(); public void AddApi() { intList.Add(10); //添加1个元素 intList.AddRange(new List<int>() { 5, 1, 1, 2, 2, 3 }); //批量添加元素 }
void Insert(int index, T item);
void InsertRange(int index, IEnumerable《T》 collection)4-3 削除要素 は、intList が初期値 {10,5,1,1,2,2,3} を持つ List 型であると仮定します。実行:
intList.Remove(1);intList から最初に出現した特定のオブジェクトを削除します。要素 1 を削除した後、 intList = {10,5,1,2,2,3}; 特定の範囲の要素を削除します:
intList.RemoveRange(0, 2);
intList.RemoveAll(removeDuplicateElements); intList.RemoveAll(i => { List<int> elementList = intList.FindAll(r => r.Equals(i)); if (elementList != null && elementList.Count > 1) return true; return false; });要素を削除する場合など、要素が存在するかどうかを判断する場合は、等価比較器を使用する必要があります。 type T が IEquatable
public class MyObject { public int Value { get; set; } public MyObject(int value) { this.Value = value; } } //实现接口IEquatable<MyObject> public class MyObjectCollection : IEquatable<MyObject> { private List<MyObject> _myObjects = new List<MyObject>() { new MyObject(3), new MyObject(4), new MyObject(3), new MyObject(2), new MyObject(3) }; //删除所有重复的元素 public void RemoveDuplicates() { _myObjects.RemoveAll(Equals); } public List<MyObject> MyObjects { get { return _myObjects; } } public bool Equals(MyObject other) { MyObject duplicate = _myObjects.Find(r => r.Value == other.Value); if (duplicate != null && duplicate!=other) return true; return false; } }Equals(object) が実装されていますが、当面は Remove(test) が失敗します。理由は後でわかります。 4-4 要素の検索要素がリストにあるかどうかを確認します。
bool Contains(obj)指定された述語で定義された条件に一致する要素が含まれているかどうかを判断します。
bool Exists(Predicate<T> match)指定された述語で定義された条件に一致する要素を検索し、最初に一致した要素を返します。
T Find(Predicate<T> match)指定された述語で定義された条件に一致するすべての要素を取得します。
List<T> FindAll(Predicate<T> match)指定された述語で定義された条件に一致する要素を検索し、最初に一致した要素の 0 から始まるインデックスを返します。
int FindIndex(Predicate<T> match)指定された述語で定義された条件に一致する要素を検索し、0 から始まる要素のインデックスを返します最初に一致した要素 要素の範囲内で最初に出現した要素から最後の要素までの 0 から始まるインデックス。
int FindIndex(int startIndex, Predicate<T> match)指定された述語で定義された条件に一致する要素を検索し、指定されたインデックスで始まり、指定された数の要素を含む要素の範囲内で最初に出現する要素の 0 から始まるインデックスを返します。オブジェクトを検索し、最初に出現するゼロから始まるインデックスを返します
int FindIndex(int startIndex, int count, Predicate<T> match)
T FindLast(Predicate<T> match)
int FindLastIndex(Predicate<T> match)を検索します指定されたオブジェクトを検索し、最後に一致したオブジェクトの 0 から始まるインデックスを返します。
int FindLastIndex(int startIndex, Predicate<T> match)
int FindLastIndex(int startIndex, int count, Predicate<T> match)
int IndexOf(T item)4-5 二分探索は、デフォルトのコンパレータを使用して
sorted
List全体内の要素を検索し、要素の0から始まるインデックスを返します。int IndexOf(T item, int index)は、指定されたコンパレーターを使用して
sorted
全体で要素を検索し、その要素の 0 から始まるインデックスを返します。int IndexOf(T item, int index, int count)
int LastIndexOf(T item)4-6 並べ替え デフォルトのコンパレーターを使用してリスト全体の要素を並べ替えます。
int LastIndexOf(T item, int index)指定された System.Comparison を使用して List 全体の要素を並べ替えます。
int LastIndexOf(T item, int index, int count)指定されたコンパレータを使用してリスト内の要素を並べ替えます。
int BinarySearch(T item);rree
操作
時間計算量挿入 | O( n )削除 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GetAnItem | O(1) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
並べ替え | O(nlogn)、最悪の場合O(n^2) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Finだ | O(n) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
接口 | 描述 |
---|---|
IEnumerable | 实现foreach语句需要实现此接口,接口方法GetEnumerator返回枚举器。 |
ICollection | 方法:Count属性,CopyTo(Array),Add, Remove, Clear |
IList | 定义了indexer,Insert, RemoveAt方法,继承ICollection |
ISet | 方法:求并集,交集,继承于ICollection |
IDictionary | 有key和value的集合实现 |
ILookup | 类似上,允许multiple values with one key. |
IComparer | comparer实现,排序比较的规则 |
IEqualityComparer | 对象be compared for equality另一个对象 |
IProducerConsumerCollection | thread-safe collection classes |
コレクションタイプ | 追加 | 挿入 | 削除 | 項目 | 並べ替え | 検索 |
---|---|---|---|---|---|---|
リスト | O( 1)または O(n) | O(n) | O(n) | O(1) | O(nlogn) | O(n) |
スタック該当なし |
該当なし |
該当なし |
| キュー |
該当なし | |
ハッシュセット | LinkedList | 辞書 | O(n) | NA ; | O(logn) | |
O(logn) | O(logn) | 該当なし | 該当なし | SortedList | O(logn) | |
O(n) | O(logn) | 該当なし | 該当なし | 上記は、C# コンテナー クラス、インターフェイス、およびパフォーマンスの詳細な紹介です。さらに関連する内容については、 PHP 中国語 Web サイト (www .php.cn)! |