c collections arraylist
C#コレクションは、データを保存および変更するための特殊なクラスです。このチュートリアルでは、ArrayList、HashTable、SortedListなどのC#コレクションについて例を挙げて学習します。
これらは、動的メモリ割り当て、非シーケンシャルデータの評価などのさまざまな目的に役立ちます。
これらのクラスはすべて、他のすべてのデータ型の基本クラスであるオブジェクトクラスを使用します。
学習内容:
C#コレクションとその使用法
C#ArrayList
ArrayListは、C#のコレクションの一部です。特定のデータ型のデータを含めるために使用されます。 C#の配列に似ていますが、明確なサイズはありません。要素が追加されると、そのサイズは自動的に増加します。
ArrayListを初期化する方法は?
ArrayListは、「ArrayList」キーワードを使用して初期化できます。
ArrayList arrList = new ArrayList();
ArrayListに要素を追加する方法は?
Add()メソッドを使用して単一の項目を配列リストに追加し、AddRange()メソッドを使用して別のコレクションの要素の範囲または複数の要素を追加できます。
例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Collections; namespace ConsoleApp1 { class Program { static void Main(string() args) { ArrayList arrList = new ArrayList(); arrList.Add(7896); arrList.Add('Seven'); Console.ReadLine(); } } }
ここでは、ArrayList.Add()メソッドを使用したことがわかります。お気づきのように、同じ配列リストに整数と文字列の両方を追加しました。これは、配列リストが非ジェネリックデータ型であるために可能です。つまり、任意のデータ型の要素を含めることができます。
ArrayListから要素にアクセスする方法は?
配列リスト要素には、配列と同様に、つまりインデックスを使用してアクセスできます。ただし、これは非ジェネリック型であるため、最初に適切なデータ型にキャストするか、配列リストの値にアクセスするときにvarキーワードを使用する必要があります。
例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Collections; namespace ConsoleApp1 { class Program { static void Main(string() args) { ArrayList arrList = new ArrayList(); arrList.Add(7896); arrList.Add('Seven'); //casted and retrieved data int first_index = (int)arrList(0); string second_index = (string)arrList(1); Console.WriteLine('The first index value is : ' + first_index); Console.WriteLine('The second index value is : ' + second_index); Console.ReadLine(); } } }
上記の例では、配列リストのインデックスを使用してデータを取得し、それを適切なデータ型にキャストしました。結果は出力としてコンソールに出力されます。
上記のプログラムの出力は次のようになります。
アニメを無料で視聴できるアニメサイト
出力
最初のインデックス値は次のとおりです:7896
2番目のインデックス値は次のとおりです。7
ArrayListに要素を挿入する方法は?
ArrayListの指定されたポイントまたはインデックスに要素を挿入します。 Insert()メソッドが使用されます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Collections; namespace ConsoleApp1 { class Program { static void Main(string() args) { ArrayList arrList = new ArrayList(); arrList.Add(7896); arrList.Add('Seven'); //casted and retrieved data int first_index = (int)arrList(0); string second_index = (string)arrList(1); Console.WriteLine('The first index value is : ' + first_index); Console.WriteLine('The second index value is : ' + second_index); arrList.Insert(1, 'Eight'); second_index = (string)arrList(1); Console.WriteLine('The second index value is : ' + second_index); Console.ReadLine(); } } }
したがって、insert()メソッドを使用してインデックス1に新しい文字列を挿入しました。したがって、上記のプログラムを実行すると、次の出力が得られます。
出力
最初のインデックス値は次のとおりです:7896
2番目のインデックス値は次のとおりです。7
2番目のインデックス値は次のとおりです。8
ArrayListから要素を削除する方法は?
要素は、Remove()メソッドを使用してArrayListから削除できます。 Removeメソッドは、パラメータ、つまり配列から削除する必要のある値を受け入れます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Collections; namespace ConsoleApp1 { class Program { static void Main(string() args) { ArrayList arrList = new ArrayList(); arrList.Add(7896); arrList.Add('Seven'); //casted and retrieved data int first_index = (int)arrList(0); string second_index = (string)arrList(1); Console.WriteLine('The first index value is : ' + first_index); Console.WriteLine('The second index value is : ' + second_index); arrList.Insert(1, 'Eight'); second_index = (string)arrList(1); Console.WriteLine('The second index value is : ' + second_index); arrList.Remove(7896); var data = arrList(0); Console.WriteLine('The value at 0 index is : ' + data); Console.ReadLine(); } } }
removeメソッドは、指定された値をリストから削除します。指定されたインデックスから値が削除されると、後続の値は1つのインデックスを上に移動してギャップを埋めます。 0個のインデックスを削除すると、インデックス1の値が移動し、0の空白が埋められます。
次のプログラムの出力は次のようになります。
出力
最初のインデックス値は次のとおりです:7896
2番目のインデックス値は次のとおりです。7
2番目のインデックス値は次のとおりです。8
0インデックスの値は次のとおりです。8
インデックスを使用してリスト要素を削除する方法は?
ユーザーは、RemoveAt()メソッドを使用して、特定のインデックスからリスト要素を削除できます。 RemoveAt()は、要素を削除する必要のあるインデックス番号を持つ単一のパラメーターを受け入れます。 Removeメソッドと同様に、中央から要素を削除すると、次の要素がプッシュされて1ステップ上に移動し、ギャップが埋められます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Collections; namespace ConsoleApp1 { class Program { static void Main(string() args) { ArrayList arrList = new ArrayList(); arrList.Add(7896); arrList.Add('Seven'); //casted and retrieved data int first_index = (int)arrList(0); string second_index = (string)arrList(1); Console.WriteLine('The first index value is : ' + first_index); Console.WriteLine('The second index value is : ' + second_index); arrList.Insert(1, 'Eight'); second_index = (string)arrList(1); Console.WriteLine('The second index value is : ' + second_index); arrList.RemoveAt(1); var data = arrList(1); Console.WriteLine('The value at 1 index is : ' + data); Console.ReadLine(); } } }
上記の例では、RemoveAtを使用してインデックス1を削除しました。したがって、インデックス2の要素をインデックス1に移動して、ギャップを置き換える必要があります。
次のプログラムの出力は次のようになります。
出力
最初のインデックス値は:7896
2番目のインデックス値は:7
2番目のインデックス値は:8
1つのインデックスの値は次のとおりです。7
ArrayListを並べ替えて逆にする方法は?
ArrayListは、ソート操作とリバース操作のための2つの異なるメソッドを提供します。条件は1つだけです。つまり、配列リスト内のすべての要素は、コンパレータと比較するために同じデータ型である必要があります。そうでない場合、ランタイムエラーがスローされます。
アンドロイドのための最高の携帯電話スパイアプリ
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Collections; namespace ConsoleApp1 { class Program { static void Main(string() args) { ArrayList arrList = new ArrayList(); arrList.Add(7); arrList.Add(4); arrList.Add(5); arrList.Add(1); arrList.Add(3); Console.WriteLine('Original Array List'); foreach (var v in arrList) { Console.Write(v + ' '); } //sorting an array list Console.WriteLine(); Console.WriteLine('Sorted Array List'); arrList.Sort(); foreach (var srt in arrList) { Console.Write(srt + ' '); } //Reversing an array list Console.WriteLine(); Console.WriteLine('Reversed Array List'); arrList.Reverse(); foreach (var rvrs in arrList) { Console.Write(rvrs + ' '); } Console.ReadLine(); } } }
上記のプログラムでは、最初に整数データ型の配列リストを作成し、次にsortメソッドを使用してリストをソートし、reverseメソッドを使用してソートされたリストを逆にしました。
したがって、次のリストの出力は次のようになります。
出力
元の配列リスト
7 4 5 1 3
ソートされた配列リスト
1 3 4 5 7
逆配列リスト
7 5 4 3 1
C#HashTable
C#のSystem.Collections名前空間には、ディクショナリと非常によく似たHashtableが含まれています。ハッシュテーブルは、キーと値のペアの形式でデータを格納します。
これは、ハッシュコードをハッシュキーに内部的に割り当てることによって内部的に行われ、データにアクセスするたびに、ハッシュコードをハッシュキーと照合してデータを取得します。表の各項目には、キーと値のペアがあります
HashTableを初期化する方法は?
HashTableは、キーワードHashTableを使用して、そのインスタンスを作成することで初期化できます。
Hashtable hashtbl = new Hashtable();
ハッシュテーブルに要素を追加する方法は?
Add()メソッドを使用して要素をHashTableに追加できます。これにより、ユーザーはキーと値を使用してアイテムを追加できます。キーまたは値のデータ型を説明することは重要ではありません。 HashTableに要素を追加するときは、値がnullになる可能性のあるnullをキーに含めることはできないことに注意してください。
HashTable.Add(Keys、Values);
例:
class Program { static void Main(string() args) { Hashtable hashtbl = new Hashtable(); hashtbl.Add('Number',1); hashtbl.Add('Car', 'Ferrari'); hashtbl.Add(8, 'eight'); } }
ご覧のとおり、キーと値としてさまざまなデータ型を追加しました。
HashTableに存在する要素にアクセスする方法は?
インデクサーを使用して、ハッシュテーブルから任意のキーの値を取得できます。ただし、インデクサーには、テーブルにアクセスして値を取得するためのキーも必要です。
上記のプログラムに小さなコードスニペットを追加して、値を取得しましょう。
class Program { static void Main(string() args) { Hashtable hashtbl = new Hashtable(); hashtbl.Add('Number',1); hashtbl.Add('Car', 'Ferrari'); hashtbl.Add(8, 'eight'); int value1 = (int)hashtbl('Number'); String value2 = (string)hashtbl('Car'); String value3 = (string)hashtbl(8); Console.WriteLine(value1); Console.WriteLine(value2); Console.WriteLine(value3); Console.ReadLine(); } }
これを実行すると、次の出力が生成されます。
1
フェラーリ
8
上記のプログラムでは、発生する可能性のあるコンパイルエラーを削除するために、特定のデータ型のすべてのキーの値をキャストしています。これは、非ジェネリックコレクションであるため、Hashtableには、そのコンテンツのデータ型に関する情報(キーと値)が含まれていないためです。
したがって、データコンパイラを直接取得しようとすると、データ型について混乱し、エラーがスローされます。
ハッシュテーブルから要素を削除する方法は?
ハッシュテーブルから特定のキーと値のペアを削除したいとします。これを実現するには、コレクションが提供するRemove()メソッドを使用する必要があります。 Removeメソッドは、指定されたキーと値のペアをハッシュテーブルから完全に削除します。
Remove(Key);
上記のプログラムにRemoveメソッドを追加して、アイデアを得ましょう。
class Program { static void Main(string() args) { Hashtable hashtbl = new Hashtable(); hashtbl.Add('Number',1); hashtbl.Add('Car', 'Ferrari'); hashtbl.Add(8, 'eight'); int value1 = (int)hashtbl('Number'); String value2 = (string)hashtbl('Car'); String value3 = (string)hashtbl(8); Console.WriteLine(value1); Console.WriteLine(value2); Console.WriteLine(value3); //now we remove a key hashtbl.Remove(8); //Lets try to find the remove key now String valueRemoved = (string)hashtbl(8); Console.WriteLine('The value of the given key is :'+valueRemoved); Console.ReadLine(); } }
上記のプログラムの出力は次のようになります。
1
フェラーリ
8
指定されたキーの値は次のとおりです。
いいえ、ハッシュテーブルからキーを削除したため、値がコンソールに出力されます。したがって、valueRemovedの文字列値はnullです。
ハッシュテーブルからすべてを削除したい場合、C#はClear()と呼ばれる別のメソッドを提供します。 Removeメソッドは一度に1つのキーと値のペアを削除しますが、Clearメソッドはハッシュマップからすべてを削除します。
これを行うために、以下のプログラムを見てみましょう。
class Program { static void Main(string() args) { Hashtable hashtbl = new Hashtable(); hashtbl.Add('Number',1); hashtbl.Add('Car', 'Ferrari'); hashtbl.Add(8, 'eight'); int value1 = (int)hashtbl('Number'); String value2 = (string)hashtbl('Car'); String value3 = (string)hashtbl(8); Console.WriteLine(value1); Console.WriteLine(value2); Console.WriteLine(value3); //now we remove a key hashtbl.Remove(8); //Lets try to find the remove key now String valueRemoved = (string)hashtbl(8); Console.WriteLine('The value of the given key is :'+valueRemoved); // clearing all data from the HashTable hashtbl.Clear(); Console.ReadLine(); } }
上記のプログラムは、ハッシュテーブルからすべての要素を削除し、それを空にします。
Hashtableが提供するその他の重要なメソッドは、ContainsKey()とContainsValue()です。これらのメソッドは両方とも、キーまたは値である1つの引数を受け入れ、ブール値を返します。したがって、このメソッドで渡されたパラメータがハッシュテーブルに存在する場合はtrue値を返し、存在しない場合はfalseを返します。
C#SortedList
名前が示すように、SortedListには、ソートされたデータが昇順で含まれています。同様のキーと値のペアが含まれているため、Hashtableに似ています。 SortedListに挿入または追加されたすべてのキーは、自動的に昇順で配置されます。
SortedListを初期化する方法は?
SortedListは、キーワードSortedListを使用して、そのオブジェクトインスタンスを作成することで初期化できます。
SortedList sortedList = new SortedList();
その後、オブジェクトを使用して、SortedListプロパティとメソッドを使用して操作を実行できます。
SortedListに要素を追加する方法は?
Add()メソッドを使用して、SortedListに要素を追加できます。 SortedListでは、キーと値を追加する必要があります。キーと値は任意の順序で追加でき、ソートされたリストは追加されたすべての要素を昇順で並べます。
最高のデータベースソフトウェアは何ですか
class Program { static void Main(string() args) { SortedList sortedList = new SortedList(); sortedList.Add(2, 'Two Pineapples'); sortedList.Add(4, 'Four Apples'); sortedList.Add(3, 'Three Lemons'); sortedList.Add(5, 'Five Mangoes'); sortedList.Add(1, 'One Tree'); Console.ReadLine(); } }
上記のプログラムでは、キーとして整数を追加し、次に値として文字列を追加したことがわかります。必要に応じて、任意の順序で任意のデータ型を追加できます。 SortedListは、昇順で並べ替えます。
HashTableと同様に、キーをnullにすることはできません。比較のために、すべてのキーのデータ型を同じにする必要があります。そうしないと、コンパイルエラーがスローされます。
ソート済みリストは、要素を追加するたびに要素をソートします。したがって、並べ替えが完了した後に要素を追加した場合でも、その要素は再度並べ替えられ、適切なインデックスに追加されます。
SortedListから要素にアクセスする方法は?
ソート済みリストの値には、キーを使用してアクセスできます。
前の例で説明したSortedListから値をフェッチする簡単なコードを追加しましょう。
class Program { static void Main(string() args) { SortedList sortedList = new SortedList(); sortedList.Add(2, 'Two Pineapples'); sortedList.Add(4, 'Four Apples'); sortedList.Add(3, 'Three Lemons'); sortedList.Add(5, 'Five Mangoes'); sortedList.Add(1, 'One Tree'); string i = (string)sortedList(1); string j = (string)sortedList(5); string k = (string)sortedList(3); Console.WriteLine(i); Console.WriteLine(j); Console.WriteLine(k); Console.ReadLine(); } }
上記のコードスニペットの出力は次のようになります。
一本の木
5つのマンゴー
3つのレモン
上記のコードスニペットでは、特定のデータ型のすべてのキーの値をキャストして、値のデータ型で発生する可能性のあるコンパイルエラーを削除する必要があります。これは、一部のキーに異なるデータ型が含まれている場合でも、コンパイルエラーがスローされないようにするために行われます。
特定のキーがSortedListに存在するかどうかを検証する方法は?
2つの組み込みメソッドがあります。 含む() そして containsKey() これは、sortedList内に特定のキーが存在するかどうかを判断するのに役立ちます。 ConstainsValue() コレクション内に特定の値が存在するかどうかを判断するために使用される別の方法です。
これらの方法について詳しく知るために、簡単なプログラムを見てみましょう。
class Program { static void Main(string() args) { SortedList sortedList = new SortedList(); sortedList.Add(2, 'Two Pineapples'); sortedList.Add(4, 'Four Apples'); sortedList.Add(3, 'Three Lemons'); sortedList.Add(5, 'Five Mangoes'); sortedList.Add(1, 'One Tree'); //boolean value for key 5 bool key = sortedList.ContainsKey(5); //boolean value for vlaue 'One Tree' bool val = sortedList.ContainsValue('One Tree'); //Boolean value for unavailable key bool unKey = sortedList.ContainsKey(25); //Boolean value for unavailable value bool unVal = sortedList.ContainsValue('some randome value'); Console.WriteLine('The sorted list contains 5 key :' + key); Console.WriteLine('The sorted list contains One Tree value :' + val); Console.WriteLine('The sorted list contains 25 key :' +unKey); Console.WriteLine('The sorted list contains some random value:' + unVal); Console.ReadLine(); } }
上記のプログラムの出力は次のようになります。
ソートされたリストには5つのキーが含まれています:True
ソートされたリストには、1つのツリー値が含まれます:True
ソートされたリストには25個のキーが含まれています:False
ソートされたリストにはランダムな値が含まれています:False
上記のプログラムでは、値またはキーがソート済みリスト内に存在する場合は真の値が返され、存在しない場合は偽の値が返されることがはっきりとわかります。
SortedListから要素を削除する方法は?
ソート済みリストには、ソート済みリスト内に存在する要素を削除するためのRemove()メソッドとRemoveAt()メソッドがあります。 Removeは、キー名を持つ単一の引数を受け入れ、RemoveAtも、インデックス付きの単一の引数を受け入れます。
これらのメソッドは両方とも、引数に基づいてソート済みリスト内に存在する要素をすべて削除します。
より明確に理解するために、簡単なコードを見てみましょう。
class Program { static void Main(string() args) { SortedList sortedList = new SortedList(); sortedList.Add(2, 'Two Pineapples'); sortedList.Add(4, 'Four Apples'); sortedList.Add(3, 'Three Lemons'); sortedList.Add(5, 'Five Mangoes'); sortedList.Add(1, 'One Tree'); //The Remove() method accepts key as argument and removes both the key and the value sortedList.Remove(1); //Now we will check if the key is present bool rmvKey = sortedList.ContainsKey(1); Console.WriteLine('The presence if the key is: ' + rmvKey); //The RemoveAt() method acceots index as argument and remove any key and value present at that index sortedList.RemoveAt(3); Console.ReadLine(); } }
上記のプログラムの出力は次のようになります。
キーが次の場合の存在:False
上記のプログラムでは、最初にRemoveメソッドを使用して、キーを使用してキーと値のペアを削除しました。これにより、引数で指定されたキーに一致するキーと値のペアがすべて削除されます。次に、ContainsKeyメソッドを使用して、削除されたキーが並べ替えリストに存在しないことを確認しました。
次の行では、インデックスを使用して要素を削除するRemoveAtメソッドを使用しました。したがって、前に説明したように、特定の要素がインデックスから削除されると、別の要素が上に移動して、並べ替えられたリスト構造を再配置および維持します。
結論
コレクションは、データを格納および操作するためのC#プログラミング言語に存在する専用クラスです。これらは、特定のアクションを実行するために使用されます。つまり、特定のデータセットに対して動的リスト、リバース、ソートなどを作成するために使用されます。
このチュートリアルでは、いくつかの点で配列に似ていますが、事前定義されたサイズがないArrayListについて学習しました。また、キーと値のペアでデータを格納するHashTableについても学びました。キーを使用して任意の値を取得できます。
また、HashTableに似ているが、キーに基づいて昇順で、その中に存在するすべてのデータを自動的にソートするソート済みリストについても学びました。
並べ替えリスト内のデータは常に昇順です。つまり、中央から特定の要素を削除したり、並べ替えリストに新しい要素を追加したりしても、すべてのデータが自動的に昇順で並べ替えられます。
サンプルコード
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SeleniumFrameWork.FrameworkEssentials; using SeleniumFrameWork.FrameWorkSupportModules; namespace ConsoleApp1 { class Program { static void Main(string() args) { /* Array List Code */ ArrayList arrList = new ArrayList(); arrList.Add(7); arrList.Add(4); arrList.Add(5); arrList.Add(1); arrList.Add(3); Console.WriteLine('Original Array List'); foreach (var v in arrList) { Console.Write(v + ' '); } //sorting an array list Console.WriteLine(); Console.WriteLine('Sorted Array List'); arrList.Sort(); foreach (var srt in arrList) { Console.Write(srt + ' '); } //Reversing an array list Console.WriteLine(); Console.WriteLine('Reversed Array List'); arrList.Reverse(); foreach (var rvrs in arrList) { Console.Write(rvrs + ' '); } /* HashTable Code */ Hashtable hashtbl = new Hashtable(); hashtbl.Add('Number', 1); hashtbl.Add('Car', 'Ferrari'); hashtbl.Add(8, 'eight'); int value1 = (int)hashtbl('Number'); String value2 = (string)hashtbl('Car'); String value3 = (string)hashtbl(8); Console.WriteLine(value1); Console.WriteLine(value2); Console.WriteLine(value3); //now we remove a key hashtbl.Remove(8); //Lets try to find the remove key now String valueRemoved = (string)hashtbl(8); Console.WriteLine('The value of the given key is :' + valueRemoved); // clearing all data from the HashTable hashtbl.Clear(); /* Sorted List Code */ SortedList sortedList = new SortedList(); sortedList.Add(2, 'Two Pineapples'); sortedList.Add(4, 'Four Apples'); sortedList.Add(3, 'Three Lemons'); sortedList.Add(5, 'Five Mangoes'); sortedList.Add(1, 'One Tree'); string i = (string)sortedList(1); string j = (string)sortedList(5); string k = (string)sortedList(3); Console.WriteLine(i); Console.WriteLine(j); Console.WriteLine(k); //boolean value for key 5 bool key = sortedList.ContainsKey(5); //boolean value for vlaue 'One Tree' bool val = sortedList.ContainsValue('One Tree'); //Boolean value for unavailable key bool unKey = sortedList.ContainsKey(25); //Boolean value for unavailable value bool unVal = sortedList.ContainsValue('some randome value'); Console.WriteLine('The sorted list contains 5 key :' + key); Console.WriteLine('The sorted list contains One Tree value :' + val); Console.WriteLine('The sorted list contains 25 key :' +unKey); Console.WriteLine('The sorted list contains some randome value:' + unVal); //The Remove() method accepts key as argument and removes both the key and the value sortedList.Remove(1); //Now we will check if the key is present bool rmvKey = sortedList.ContainsKey(1); Console.WriteLine('The presence if the key is: ' + rmvKey); //The RemoveAt() method acceots index as argument and remove any key and value present at that index sortedList.RemoveAt(3); Console.ReadLine(); } } }