C#コレクションの概要



C Collection Summary







最初に次のセットの基本情報を理解しましょう



1. FCLのコレクションタイプは、ジェネリックコレクションと非ジェネリックコレクションに分けられます。

2.非ジェネリックコレクションのクラスとインターフェイスは、System.Collections名前空間にあります。

3.ジェネリックコレクションのクラスとインターフェイスは、System.Collections.Generic名前空間にあります。



ICollectionインターフェイスは、System.Collections名前空間の非ジェネリックコレクションクラスの基本インターフェイスです。 IEnumerableインターフェイスから継承します。 IEnumerableインターフェイスから継承するということは、このインターフェイスを実装する実装クラスが列挙子メソッドGetEnumeratorを実装する必要があることを意味します。GetEnumeratorはデータのIEnumeratorタイプを返します。 IDictionaryインターフェイスとIListインターフェイスは、より特殊なインターフェイスとしてICollectionから継承されます。 IDictionaryインターフェースはキー/値ペアインターフェースであり、その実装はHashTableクラスに似ており、IListは、ArrayListクラスなどのインデックスによってメンバーにアクセスできる値のコレクションです。配列と比較すると、クラスコレクションは変数コレクションと見なすことができ、自動長さの増加などの利点があります。IEnumerableおよびIEnumerableは、すべてのコレクションまたはコレクションインターフェイスの基本インターフェイスであり、すべてのコレクションインターフェイスまたはコレクションはそれを継承して実装します。 IEnumerableは最も低いインターフェイスです。非ジェネリックコレクションに格納されているものはすべて、System.Object型です。

1.非ジェネリックコレクションとジェネリックコレクションのインターフェイスを以下に示します。

非ジェネリックコレクションインターフェイスジェネリックコレクションインターフェイス説明

ICollection ICollectionすべてのコレクションのサイズ(Count)を定義し、列挙子(foreacher)からnumerableメソッドを継承します

IList Ilist

IDictionaryIDictionaryキーと値のペアのコレクションを表します

IComparerIComparer実装するメソッド

IEqualityComparerIEqualityComparerオブジェクトの同等性比較をサポートするメソッドを定義します

IEnumerableIEnumerableパブリック列挙子。このインターフェースを実装するということは、foreachステートメントがコレクション内の要素をループできるようにすることを意味します

IEnumerator IEnumeratorは、汎用セットでの単純な反復をサポートします

さまざまなコレクションインターフェイスとコレクションについて、以下で詳しく紹介します。個人的には、収益から始めるべきだと考えています。

MSDNでIEnumerableについて説明し、拡張メソッドについては説明しません。拡張メソッドをスキップして、Linqを学習するときはそのままにしておきます。

1. IEnumerableインターフェイスには、メソッドが1つだけあり、属性はありません。

メソッドの説明

GetEnumeratorは、コレクションを反復処理する列挙子を返します。このインターフェースの実装または継承はこのメソッド用であり、foreachでトラバースできます。に


2.同じことがIEnumerableインターフェースにも当てはまります。これは、属性のない1つのメソッドにすぎません。

メソッドの説明

GetEnumeratorは、コレクションを反復処理する列挙子を返します。


3.ICollectionインターフェイス

メソッドの説明

CopyTo特定の配列インデックスから始めて、ICollectionの要素を配列にコピーします。
GetEnumeratorは、コレクションを反復処理する列挙子を返します。 (IEnumerableから継承されます。)

属性

カウントICollectionに含まれる要素の数を取得します。カウントのソースはここにあります。
IsSynchronized ICollectionへのアクセスを同期するかどうかを示す値を取得します(スレッドセーフ)。
SyncRootICollectionアクセスの同期に使用できるオブジェクトを取得します。


4、ICollection

メソッドの説明

カウントICollectionに含まれる要素の数を取得します<(Of )>)。
IsReadOnlyICollectionかどうかを示す値を取得します<(Of )>)は読み取り専用です。

属性

追加ICollectionにアイテムを追加します<(Of )>)。
クリアICollectionからすべてのアイテムを削除します<(Of )>)。
ICollectionかどうかを判断する<(Of )>)には特定の値が含まれます。
CopyTo特定の配列インデックスから始めて、ICollectionの要素をコピーします<(Of )>)配列に。
GetEnumeratorがリロードされました。
削除特定のオブジェクトの最初の一致をICollectionから削除します<(Of )>)。

このICollectはコレクションの影を作り始めたばかりで、追加とクリアが可能です。汎用コレクションインターフェイスの基本クラスとして機能するのも不思議ではありません。


5、IList

IListはICollectionとIEnumerableを継承します

メソッドの説明

追加アイテムをIListに追加します。
クリアIListからすべてのアイテムを削除します。
含むIListに特定の値が含まれるかどうかを判別します。
CopyTo特定の配列インデックスから始めて、ICollectionの要素を配列にコピーします。 (ICollectionから継承されます。)
GetEnumeratorコレクションを反復処理する列挙子を返します。 (IEnumerableから継承されます。)
IndexOfIList内の特定のアイテムのインデックスを決定します。
挿入IListの指定されたインデックスにアイテムを挿入します。
削除特定のオブジェクトの最初の一致をIListから削除します。
RemoveAt指定されたインデックスのIListアイテムを削除します。

属性

カウントICollectionに含まれる要素の数を取得します。 (ICollectionから継承されます。)
IsFixedSizeIListのサイズが固定されているかどうかを示す値を取得します。
IsReadOnlyIListが読み取り専用かどうかを示す値を取得します。
IsSynchronized ICollectionへのアクセスを同期するかどうかを示す値を取得します(スレッドセーフ)。 (ICollectionから継承されます。)
アイテム指定されたインデックスで要素を取得または設定します。
SyncRootICollectionアクセスの同期に使用できるオブジェクトを取得します。 (ICollectionから継承されます。)

継続的な継承プロセスでは、これらのインターフェイスは独自のものを追加し続け、継承されるほど、継承されることがわかります。


6、IList

IListはICollection、IEnumerable、IEnumerableを継承します

メソッドの説明

追加ICollectionにアイテムを追加します<(Of )>)。 (ICollectionから継承<(Of )>)。)
クリアICollectionからすべてのアイテムを削除します<(Of )>)。 (ICollectionから継承<(Of )>)。)
ICollectionかどうかを判断する<(Of )>)には特定の値が含まれます。 (ICollectionから継承<(Of )>)。)
CopyTo特定の配列インデックスから始めて、ICollectionの要素をコピーします<(Of )>)配列に。 (ICollectionから継承<(Of )>)。)
GetEnumeratorがリロードされました。
IndexOfIList内の特定のアイテムのインデックスを決定します<(Of )>)。
挿入アイテムをIListに挿入します<(Of )>)指定されたインデックスで。
削除特定のオブジェクトの最初の一致をICollectionから削除します<(Of )>)。 (ICollectionから継承<(Of )>)。)
RemoveAtIListを削除します<(Of )>)指定されたインデックスのアイテム。

属性

カウントICollectionに含まれる要素の数を取得します<(Of )>)。 (ICollectionから継承<(Of )>)。)
IsReadOnlyICollectionかどうかを示す値を取得します<(Of )>)は読み取り専用です。 (ICollectionから継承<(Of )>)。)
アイテム指定されたインデックスで要素を取得または設定します。

同様に、継続的な継承では、新しいものが追加され、機能がますます強力になっています。インデックスの取得と設定をサポートすることがIListのソースです。 NHibernateがデータを返すためにこのインターフェースを選択した理由を私は理解していません。実際、このインターフェースで十分です。


7.IDictionaryインターフェース

IDictionaryは、下部に設定されたキーと値のペアであり、値セットのICollectionに相当します。

メソッドの説明

追加がリロードされました。
クリアICollectionからすべてのアイテムを削除します<(Of )>)。 (ICollectionから継承<(Of )>)。)
ICollectionかどうかを判断する<(Of )>)には特定の値が含まれます。 (ICollectionから継承<(Of )>)。)
containsKeyは、IDictionary<(Of )>)には、指定されたキーを持つ要素が含まれます。
CopyTo特定の配列インデックスから始めて、ICollectionの要素をコピーします<(Of )>)配列に。 (ICollectionから継承<(Of )>)。)
GetEnumeratorがリロードされました。
削除が再読み込みされました。
TryGetValue指定されたキーに関連付けられた値を取得します。

属性

カウントICollectionに含まれる要素の数を取得します<(Of )>)。 (ICollectionから継承<(Of )>)。)
IsReadOnlyICollectionかどうかを示す値を取得します<(Of )>)は読み取り専用です。 (ICollectionから継承<(Of )>)。)
項目指定したキーで要素を取得または設定します。
キーはICollectionを取得します<(Of )>)IDictionaryを含む<(Of )>)。
値ICollectionを取得します<(Of )>)IDictionaryの値を含む<(Of )>)。

このインターフェイスによって提供される関数は、ICollectionの関数と似ています。実際、キーと値のペアの創設者です。


8、IDictionary

メソッドの説明

追加提供されたキーと値を持つ要素をIDictionaryオブジェクトに追加します。
クリアIDictionaryオブジェクトからすべての要素を削除します。
含むIDictionaryオブジェクトに、指定されたキーを持つ要素が含まれるかどうかを判別します。
CopyTo特定の配列インデックスから始めて、ICollectionの要素を配列にコピーします。 (ICollectionから継承されます。)
GetEnumeratorリロードされました。
削除指定されたキーを持つ要素をIDictionaryオブジェクトから削除します。

属性

カウントICollectionに含まれる要素の数を取得します。 (ICollectionから継承されます。)
IsFixedSizeIDictionaryオブジェクトのサイズが固定されているかどうかを示す値を取得します。
IsReadOnlyIDictionaryオブジェクトが読み取り専用かどうかを示す値を取得します。
IsSynchronized ICollectionへのアクセスを同期するかどうかを示す値を取得します(スレッドセーフ)。 (ICollectionから継承されます。)
項目指定したキーで要素を取得または設定します。
キーIDictionaryオブジェクトのキーを含むICollectionオブジェクトを取得します。
SyncRootICollectionアクセスの同期に使用できるオブジェクトを取得します。 (ICollectionから継承されます。)
値IDictionaryオブジェクトの値を含むICollectionオブジェクトを取得します。


9、ISet

ISetは、ICollection、IEnumerable、IEnumerableからも継承されます。

メソッドの説明

Add(T)ICollectionにアイテムを追加します。 (ICollectionから継承されます。)
Add(T)は、現在のセットに要素を追加し、要素が正常に追加されたかどうかを示す値を返します。
クリアICollectionからすべてのアイテムを削除します。 (ICollectionから継承されます。)
含むICollectionに特定の値が含まれるかどうかを判別します。 (ICollectionから継承されます。)
CopyTo特定の配列インデックスから始めて、ICollectionの要素を配列にコピーします。 (ICollectionから継承されます。)
ExceptWithは、指定されたセット内のすべての要素を現在のセットから削除します。
GetEnumerator()コレクションを反復処理する列挙子を返します。 (IEnumerableから継承されます。)
GetEnumerator()コレクションを反復処理する列挙子を返します。 (IEnumerableから継承されます。)
IntersectWith現在のセットを変更して、指定したセットにも存在する要素のみがセットに含まれるようにします。
IsProperSubsetOf現在の設定が正しいかどうかを判断します(厳密)セットのサブセットを指定します。
IsProperSupersetOf現在の設定が正しいかどうかを判断します(厳密)セット内のスーパーセットを指定します。
IsSubsetOfセットが指定されたセットのサブセットであるかどうかを判別します。
IsSupersetOf現在のセットが指定されたセットのスーパーセットであるかどうかを判別します。
オーバーラップ現在のセットが指定されたセットとオーバーラップするかどうかを判別します。
削除特定のオブジェクトの最初の一致をICollectionから削除します。 (ICollectionから継承されます。)
SetEquals現在のセットと指定されたセットに同じ要素が含まれているかどうかを判別します。
SymmetricExceptWith現在のセットを変更して、現在のセットまたは指定されたセットに存在する要素のみをセットに含めるようにします(ただし、両方に共通の要素を含めることはできません)。
UnionWith現在の設定を変更して、現在のセットまたは指定されたセットのすべての要素を含めます。

これらのインターフェース間の関係を覚えておくことは、実際には非常に重要です。メソッドとプロパティが完全に記憶されていなくてもかまいませんが、それらが提供する機能と継承関係を覚えておく必要があります。

最初にIComparerインターフェイスについて説明します。このインターフェイスは、2つのオブジェクトを比較する方法の単なる方法です。

画像
 public class StringLengthComparer : IComparer<string> { public int Compare(string s1, string s2) { if (s1.Length > s2.Length) { return (1) } else if (s1.Length < s2.Length) { return (2) } else { return (0) } } }
画像

コレクションインターフェイスについて説明した後、コレクションについて説明しましょう。

1、ArrayList

ArrayListは、IList、ICollection、およびIEnumerableインターフェイスを実装します。

ArrayListとArrayの名前は似ています。次に、2つの類似点と相違点を比較してみましょう。

同じ点:

(1)。どちらもIList、ICollection、およびIEnumerableインターフェイスを実装しています。

(2)、どちらも整数インデックスを使用して、読み取りや割り当てなど、コレクション内の要素にアクセスできます。コレクション内のインデックスは0から始まります。

差:

(1)、ArrayListはコレクションであり、Arrayは配列です。

(2)、ArrayListは具象クラスであり、Arrayは抽象クラスです。

(3)。配列は、インスタンス化するときに要素の数を指定する必要があります。一度決定した番号は変更できません。 ArrayListはこの点を拡張します。 ArrayListインスタンスがインスタンス化されると、コレクション要素の数を省略できます(デフォルトの初期容量があります))。もちろん、初期容量を指定することもできます。

(4)。 Lengthプロパティは、配列内の要素の数を取得するために使用され、Countプロパティは、ArrayListコレクション内の要素の数を取得するために使用されます。

(5)、配列は複数の次元を持つことができますが、ArrayListは1つの次元のみにすることができます。

ArrayListによって提供される特定の関数を見てください

属性の説明

容量ArrayListに含めることができる要素の数を取得または設定します。
CountArrayListに実際に含まれている要素の数を取得します。
IsFixedSizeArrayListのサイズが固定されているかどうかを示す値を取得します。
IsReadOnlyArrayListが読み取り専用かどうかを示す値を取得します。
IsSynchronized ArrayListへのアクセスを同期するかどうかを示す値を取得します(スレッドセーフ)。
アイテム指定されたインデックスで要素を取得または設定します。
SyncRootArrayListアクセスの同期に使用できるオブジェクトを取得します。

方法

アダプタ特定のIListのArrayListパッケージを作成します。
AddオブジェクトをArrayListの最後に追加します。
AddRangeICollectionの要素をArrayListの最後に追加します。
BinarySearchがリロードされました。バイナリ検索アルゴリズムを使用して、ソートされたArrayListまたはその一部の特定の要素を検索します。
クリアArrayListからすべての要素を削除します。
クローンArrayListのシャローコピーを作成します。
含む要素がArrayListにあるかどうかを判別します。
CopyToがリロードされました。 ArrayListまたはその一部を1次元配列にコピーします。
FixedSizeがリロードされました。固定サイズのリストパッケージを返します。要素の変更は許可されていますが、追加または削除は許可されていません。
GetEnumeratorリロードされました。 ArrayListを反復処理する列挙子を返します。
GetRangeソースArrayList内の要素のサブセットを表すArrayListを返します。
IndexOfがリロードされました。 ArrayListまたはその一部で最初に出現する値のゼロベースのインデックスを返します。
挿入要素は、ArrayListの指定されたインデックスに挿入されます。どこにでも挿入できます。
InsertRangeコレクション内の要素をArrayListの指定されたインデックスに挿入します。
LastIndexOfがリロードされました。 ArrayListまたはその一部で最後に出現した値のゼロベースのインデックスを返します。
ReadOnlyがリロードされました。読み取り専用のリストラッパーを返します。
ArrayListから特定のオブジェクトの最初の一致を削除します。
RemoveAtArrayListの指定されたインデックスにある要素を削除します。
RemoveRangeArrayListから特定の範囲の要素を削除します。
要素が指定された値のコピーであるArrayListに戻るを繰り返します。
リバースがリロードされました。 ArrayListまたはその一部の要素の順序を逆にします。
SetRangeセット内の要素をArrayList内の特定の範囲の要素にコピーします。
ソートがリロードされました。 ArrayListまたはその一部の要素を並べ替えます。
同期され、リロードされました。同期された(スレッドセーフな)リストラッパーを返します。
ToArrayがリロードされました。 ArrayListの要素を新しい配列にコピーします。
TrimToSize容量をArrayListの実際の要素数に設定します。

画像
 static void Main(string[] args) { ArrayList arrayList = new ArrayList() arrayList.Add(1) //Add method, add an element to the ArrayList arrayList.Add('Hello there') arrayList.Add(3.265) IList iList = arrayList ICollection iCollection = iList IEnumerable iEnumerable = iCollection //Reflects the inheritance relationship of ArrayList foreach (object obj in iEnumerable) { Console.WriteLine(obj.ToString()) } bool b = arrayList.Contains('Hello there') //Determine whether an element is contained in the ArrayList Console.WriteLine(b) //Output True object[] objArr = new object[arrayList.Count + 1] objArr[0] = 'I use it to occupy' arrayList.CopyTo(objArr, 1) //One bit cheaper, which means that the array starts from 1, the default is 0 foreach (object obj in objArr) { Console.Write(obj.ToString() + '-') //Output I am used to occupy the seat-1-hello-3.265-  } Console.WriteLine() ArrayList AL = ArrayList.FixedSize(arrayList) //The static method returns an ArrayList object of a fixed size, the number cannot be changed. In other words, it cannot be added or deleted. Console.WriteLine(AL.IsFixedSize) //Output True //AL.Add(111) An exception is reported here, 'The size of the collection is fixed' ArrayList ALReadOnly = ArrayList.ReadOnly(arrayList) Console.WriteLine(ALReadOnly.IsReadOnly) //Output True  ArrayList AL1 = arrayList.GetRange(1, 2) //Truncate the subset according to the index order foreach (object obj in AL1) { Console.Write(obj.ToString()) //Output Hello 3.265 The new ArrayList that can be truncated contains only 1, 2 bits  } Console.WriteLine() int indexLocation = arrayList.IndexOf(1) //Retrieve from the left and return the order of the first matched element Console.WriteLine(indexLocation) //Output 0  arrayList.Add(1) //In order to reflect the difference of LastIndexOf, first add a 1 int lastLocation = arrayList.LastIndexOf(1) Console.WriteLine(lastLocation) //Returns 3  arrayList.Insert(2, 'Insert the inserted element') //This method is different from Add in that it can be inserted at any position foreach (object obj in arrayList) { Console.Write(obj.ToString() + ' ') //Output 1 Hello Insert inserted element 3.265 1  } ArrayList arr = new ArrayList() arr.Add(1) arr.Add(2) arrayList.AddRange(arr) foreach (object obj in arrayList) { Console.Write(obj.ToString() + '-') //Output 1 Hello, Insert the inserted element 3.265 1 1 2 You can see that a new set is appended to the end  } arrayList.Remove(2) foreach (object obj in arrayList) { Console.Write(obj.ToString() + '-') //Output 1 Hello Insert inserted element 3.265 1 1 You can see that 2 has been removed  } Console.WriteLine() arrayList.RemoveAt(0) foreach (object obj in arrayList) { Console.Write(obj.ToString() + '-') //Output Hello, Insert inserted element 3.265 1 1 You can see that the 0th element '2' has been removed  } Console.WriteLine() //arrayList.Reverse() //foreach (object obj in arrayList) //{ // Console.Write(obj.ToString() + '-') //All elements in reversed output order //}  ArrayList AL3 = new ArrayList() arrayList.SetRange(0,AL3) //Starting from position 0, copy the elements to AL3 foreach (object obj in AL3) { Console.Write(obj.ToString() + '-') //Output Hello Insert Inserted element 3.265 1 1  } object[] objArrs = new object[arrayList.Count] objArrs = arrayList.ToArray() foreach (object obj in objArrs) { Console.Write(obj.ToString() + '-') } Console.WriteLine() arrayList.Capacity = 5 //Read or set the number of elements that can be included. If it is less than the current number, an error will be reported. Console.WriteLine(arrayList.Count) //Output 5   arrayList.TrimToSize() Console.WriteLine(arrayList.Count) //Output 5   Console.ReadKey() }
画像

2.非ジェネリックコレクションHashTable

Hashtableは、IDictionary、ICollection、およびIEnumerableインターフェイスを実装します。ハッシュテーブル、tは小文字であることに注意してください。これは非ジェネリックコレクションであるため、キーか値かに関係なく、オブジェクトタイプが格納されます。

ハッシュテーブルの要点。

(1)、Hashtableには非汎用バージョンのみがあります。

(2)Hashtableクラスのキーは繰り返すことができませんが、値は繰り返すことができます。

(3)Hashtableクラスに格納されているキーと値のペアでは、値をnullにすることができますが、キーをnullにすることはできません。

(4)、Hashtableはソート操作を許可しません。

以下に例を示します。 Hashtableが提供する関数は、キーと値のペアを格納することを除いて、ArraryListに似ています。基本的な短い例を書いてください。

画像
 static void Main(string[] args) { Hashtable ht = new Hashtable() ht.Add(1,1) ht.Add('I love you','is it?') Console.WriteLine(ht.Count) //Output 2 Console.WriteLine(ht['I love you']) //Output 'Really?' Use key to get value Console.WriteLine(ht.Contains(1)) //Output True  Console.ReadKey() }
画像

3.キューとキュー

キューはキューになります。キューは、データがリストの一方の端に挿入され、リストのもう一方の端から削除されるデータ構造です。一方通行のように、1つのセクションからのみ入り、一方の端から出ることができます。 Queueクラスは、ICollectionおよびIEnumerableインターフェイスを実装します。

キューのいくつかの重要な機能。

1、先入れ先出し

2、コレクションにnull値を追加できます

3、セット内の要素を繰り返すことができます

4、キュー容量は必要に応じて自動的に追加されます

5.キューの比例係数は、より多くの容量が必要な場合に現在の容量を掛ける数です。デフォルトは2.0です。

キュー機能の機能を一覧表示するようになりました

メンバータイプ説明

Clearメソッドキューからすべてのオブジェクトを削除し、キューをクリアします。

メソッドを含む要素がキューにあるかどうかを判別します

エンキューメソッドオブジェクトをキューエンキューの最後に追加します

デキューメソッドキューデキューの開始時にオブジェクトを削除して戻ります

Peekメソッドは、キューの先頭にあるオブジェクトを返しますが、削除はしません。デキューとは異なり、デキューは削除されます

によって提供される機能はすべて類似しています。ここで、主にキューの役割を示す例を示します。

画像
 static void Main(string[] args) { Queue q = new Queue() q.Enqueue(1) q.Enqueue('homesick!') q.Enqueue(1.23) Console.WriteLine(q.Peek()) //Output 1 gets the value but does not remove it, which is different from dequeue int Count = q.Count //Q.Count is changing when leaving the team, so it is inappropriate to put q.Count in the loop condition for (int i = 0 i ) { Console.WriteLine(q.Dequeue().ToString()) //Note that output 1 Homesick 1.23 is taken from the first one added first  } Console.WriteLine(q.Count) //Output 0 is dequeued once and it is automatically removed.  Queue<int> qInt = new Queue<int>() qInt.Enqueue(1) qInt.Enqueue(2) qInt.Enqueue(3) Console.WriteLine(qInt.Peek()) //Output 1 int IntCount = qInt.Count for (int i = 0 i  ) { Console.WriteLine(qInt.Dequeue()) //Note that the output 123 is taken from the first one added first  } Console.WriteLine(q.Count) //Output 0 is dequeued once and it is automatically removed.  Console.ReadKey() }
画像

4.スタックとスタック

スタックはスタックと呼ばれます。スタックはキューと非常に似ていますが、キューが先入れ先出しであり、スタック内のデータの追加と削除が一方の端で実行され、スタック内のデータの後に後入れ先出しが続く点が異なります。アウト。 Stackクラスは、ICollectionおよびIEnumerableインターフェイスを実装します。

Stackクラスのいくつかの重要な機能は次のとおりです。

1.後入れ先出し。

2、コレクションにnull値を追加できます。

3.セット内の要素を繰り返します。

4.スタックの容量は必要に応じて自動的に増加します。

いくつかの特徴的な機能を挙げてください。

メンバータイプ説明

Clearメソッドスタックからすべてのオブジェクトを削除します

メソッドを含む要素がスタックにあるかどうかを判別します

プッシュメソッドスタックの一番上にあるオブジェクトをスタックに挿入します

ポップメソッドスタックの一番上にあるオブジェクトを削除して返しますポップアウト

ピークメソッドスタックの一番上にあるオブジェクトに戻りますが、削除しないでください。スタックが削除されることに注意してください。削除せずに戻ります。

カウント属性スタックに含まれる要素を取得します

画像
 static void Main(string[] args) { Stack s = new Stack() s.Push(1) s.Push('want to go back home!') s.Push(1.23) Console.WriteLine(s.Peek()) //Output 1.23 int Count = s.Count //I almost made a logical error. If it is s.Count in for, it is easy to mess up, because the pop operation s.Count is changing. for (int i = 0 i ) { Console.WriteLine(s.Pop()) //Output 1.23 I want to go home 1  } Console.WriteLine(s.Count) //Output 0  Stack<int> sInt = new Stack<int>() sInt.Push(1) sInt.Push(2) sInt.Push(3) Console.WriteLine(sInt.Peek()) //Output 3 int IntCount = sInt.Count //I almost made a logical error. If it is s.Count in for, it is easy to mess up, because the pop operation s.Count is changing. for (int i = 0 i  ) { Console.WriteLine(sInt.Pop()) //Output 3 2 1  } Console.WriteLine(sInt.Count) //Output 0  Console.ReadKey() }
画像

5.SortedListおよびSortedList

SortedListクラスは、IDictionary、ICollection、およびIEnumerableインターフェイスを実装します。 SortedListクラスはHashTableに似ています。また、キーとインデックスを介して要素にアクセスできるキーと値のペアのコレクションを表しますが、違いは、キーベースの並べ替えをサポートすることであるこのクラスの最大の役割でもあることです。 SortedListでは、キーと値は配列に格納されます。 Sortedに要素を追加すると、SortedListクラスは要素を追加し、SortedListは最初にキーを並べ替え、次に並べ替え結果Indexに従ってコレクションに挿入される位置を計算し、次にキーと値をの指定されたインデックス位置に挿入します。それぞれの配列。 foreachを使用してコレクション内の要素をループする場合、SortedListは、同じインデックス位置にあるキーと値をDictionaryEntry型のオブジェクトに配置してから戻ります。

私はMSDNを調べましたが、機能は同じであり、DEMOを1つずつ作成するエネルギーがないことを理解するのは難しいことではありません。

画像
 static void Main(string[] args) { SortedList SL = new SortedList() SL.Add('txt','txt') //It will be sorted automatically when adding SL.Add('jpg','jpg') SL.Add('png','png') foreach (DictionaryEntry de in SL) //What is returned is the DictionaryEntry object  { Console.Write(de.Key + ':' + de.Value + ' ') //Output jpg:jpg png:png txt:txt //Pay attention to this order, it will be sorted automatically when added  } Console.WriteLine() SortedList<int,string> SLString = new SortedList<int,string>() SLString.Add(3, '333') SLString.Add(2, '222') SLString.Add(1, '111') foreach (KeyValuePair<int,string> des in SLString) //What is returned is KeyValuePair, try to use var as little as possible when learning, at least you must know what is returned  { Console.Write(des.Key + ':' + des.Value + ' ') } Console.ReadKey() }
画像

6、BitArray

BitArrayクラスは、バイナリビット(0および1)のコレクションであるビット構造を実装します。 BitArrayの値はtrueまたはfalseを表します。 trueはビットがオンであることを意味し、falseはビットがオフであることを意味します。 BitArrayは、ICollectionおよびIEnumerableインターフェイスを実装します。

BitArrayのいくつかの特徴は次のとおりです。

1. BitArrayコレクションは動的調整をサポートしていないため、AddメソッドとRemoveメソッドはありません。

2.コレクションのサイズを調整する必要がある場合は、属性Lengthの値を設定することで調整できます。

3、コレクション内のインデックスは0から始まります。

4. BitArray(int length)コンストラクターを使用してBitArrayコレクションを初期化した後、その値はすべてfalseになります。

5. BitArray「or」、「exclusive OR」、および「andoperation」はBitArrayセット間でサポートされています。これらの3つのタイプの操作に参加するBitArrayセットの長さは等しくなければなりません。それ以外の場合は、例外がスローされます。

MSDNから学ぶ:

属性の説明

カウントBitArrayに含まれる要素の数を取得します。
IsReadOnlyBitArrayが読み取り専用かどうかを示す値を取得します。
IsSynchronized BitArrayへのアクセスを同期するかどうかを示す値を取得します(スレッドセーフ)。
項目BitArrayの特定の位置にあるビットの値を取得または設定します。
長さBitArrayの要素数を取得または設定します。
SyncRootBitArrayアクセスの同期に使用できるオブジェクトを取得します。

メソッドの説明

そして、現在のBitArrayの要素と指定されたBitArrayの対応する要素に対してビット単位のAND演算を実行します。
クローンBitArrayの浅いコピーを作成します。
CopyToターゲット配列の指定されたインデックスから開始して、BitArray全体を互換性のある1次元配列にコピーします。
GetBitArrayの特定の位置にあるビットの値を取得します。
GetEnumeratorは、BitArrayを反復処理する列挙子を返します。
trueに設定された要素がfalseに変更されるように、現在のBitArrayのすべてのビット値を反転しないでください。falseに設定された要素はtrueに変更されます。
または現在のBitArrayの要素と指定されたBitArrayの対応する要素に対してビット単位のOR演算を実行します。
SetBitArrayの特定の位置にあるビットを指定された値に設定します。
SetAllBitArrayのすべてのビットを指定された値に設定します。
Xor現在のBitArrayの要素と指定されたBitArrayの対応する要素に対してビット単位の排他的論理和演算を実行します。

画像
 static void Main(string[] args) { BitArray BA = new BitArray(3) BA[0] = true BA[1] = false BA[2] = true BitArray BB = new BitArray(3) BA[0] = true BA[1] = false BA[2] = true BitArray BOr = BA.Or(BB) //AND operation, return a new BitArray foreach (var b in BOr) { Console.Write(b + '-') //True-False-True  } Console.ReadKey() }