サーチ…
備考
コレクションにはいくつかの種類があります:
-
Array
-
List
-
Queue
-
SortedList
-
Stack
- 辞書
カスタム型を持つ初期化リストの作成
public class Model
{
public string Name { get; set; }
public bool? Selected { get; set; }
}
:ここでは、二つの特性を持つなしのコンストラクタを持つクラスを持っているName
とNULL可能ブール型プロパティSelected
。 List<Model>
を初期化したい場合は、これを実行する方法がいくつかあります。
var SelectedEmployees = new List<Model>
{
new Model() {Name = "Item1", Selected = true},
new Model() {Name = "Item2", Selected = false},
new Model() {Name = "Item3", Selected = false},
new Model() {Name = "Item4"}
};
ここでは、 Model
クラスのいくつかのnew
インスタンスを作成し、それらをデータで初期化します。コンストラクタを追加した場合はどうなりますか?
public class Model
{
public Model(string name, bool? selected = false)
{
Name = name;
selected = Selected;
}
public string Name { get; set; }
public bool? Selected { get; set; }
}
これにより、リストを少し違って初期化することができます。
var SelectedEmployees = new List<Model>
{
new Model("Mark", true),
new Model("Alexis"),
new Model("")
};
プロパティの1つがクラスそのものであるクラスはどうですか?
public class Model
{
public string Name { get; set; }
public bool? Selected { get; set; }
}
public class ExtendedModel : Model
{
public ExtendedModel()
{
BaseModel = new Model();
}
public Model BaseModel { get; set; }
public DateTime BirthDate { get; set; }
}
例を少し簡略化するために、 Model
クラスのコンストラクタを元に戻したことに注目してください。
var SelectedWithBirthDate = new List<ExtendedModel>
{
new ExtendedModel()
{
BaseModel = new Model { Name = "Mark", Selected = true},
BirthDate = new DateTime(2015, 11, 23)
},
new ExtendedModel()
{
BaseModel = new Model { Name = "Random"},
BirthDate = new DateTime(2015, 11, 23)
}
};
List<ExtendedModel>
をCollection<ExtendedModel>
、 ExtendedModel[]
、 object[]
、または単に[]
ます。
キュー
.Netには、 FIFO(先入れ先出し)の概念を使用するQueue
内の値を管理するためのコレクションがあります。キューの基本は、キューに要素を追加するためのEnqueue(T item)
メソッドと、最初の要素を取得してキューから削除するためのDequeue()
メソッドです。汎用バージョンは、文字列のキューに対して次のコードのように使用できます。
まず、名前空間を追加します。
using System.Collections.Generic;
それを使用する:
Queue<string> queue = new Queue<string>();
queue.Enqueue("John");
queue.Enqueue("Paul");
queue.Enqueue("George");
queue.Enqueue("Ringo");
string dequeueValue;
dequeueValue = queue.Dequeue(); // return John
dequeueValue = queue.Dequeue(); // return Paul
dequeueValue = queue.Dequeue(); // return George
dequeueValue = queue.Dequeue(); // return Ringo
オブジェクトで動作する型の汎用ではないバージョンがあります。
名前空間は次のとおりです。
using System.Collections;
非汎用キューのコードサンプルを追加する:
Queue queue = new Queue();
queue.Enqueue("Hello World"); // string
queue.Enqueue(5); // int
queue.Enqueue(1d); // double
queue.Enqueue(true); // bool
queue.Enqueue(new Product()); // Product object
object dequeueValue;
dequeueValue = queue.Dequeue(); // return Hello World (string)
dequeueValue = queue.Dequeue(); // return 5 (int)
dequeueValue = queue.Dequeue(); // return 1d (double)
dequeueValue = queue.Dequeue(); // return true (bool)
dequeueValue = queue.Dequeue(); // return Product (Product type)
Peek()というメソッドもあります。このメソッドは、要素を削除せずにキューの先頭にオブジェクトを戻します。
Queue<int> queue = new Queue<int>();
queue.Enqueue(10);
queue.Enqueue(20);
queue.Enqueue(30);
queue.Enqueue(40);
queue.Enqueue(50);
foreach (int element in queue)
{
Console.WriteLine(i);
}
出力(削除なし):
10
20
30
40
50
スタック
.Netには、 LIFO(ラスト・イン・ファーストアウト)の概念を使用するStack
内の値を管理するためのコレクションがあります。スタックの基本は、スタックに要素を追加するためのPush(T item)
メソッドと、最後に追加された要素を取得してスタックから削除するPop()
メソッドです。汎用バージョンは、文字列のキューに対して次のコードのように使用できます。
まず、名前空間を追加します。
using System.Collections.Generic;
それを使用する:
Stack<string> stack = new Stack<string>();
stack.Push("John");
stack.Push("Paul");
stack.Push("George");
stack.Push("Ringo");
string value;
value = stack.Pop(); // return Ringo
value = stack.Pop(); // return George
value = stack.Pop(); // return Paul
value = stack.Pop(); // return John
オブジェクトで動作する型の汎用ではないバージョンがあります。
名前空間は次のとおりです。
using System.Collections;
非汎用スタックのコードサンプル:
Stack stack = new Stack();
stack.Push("Hello World"); // string
stack.Push(5); // int
stack.Push(1d); // double
stack.Push(true); // bool
stack.Push(new Product()); // Product object
object value;
value = stack.Pop(); // return Product (Product type)
value = stack.Pop(); // return true (bool)
value = stack.Pop(); // return 1d (double)
value = stack.Pop(); // return 5 (int)
value = stack.Pop(); // return Hello World (string)
追加された最後の要素をStack
から削除せずに返すPeek()というメソッドもあります。
Stack<int> stack = new Stack<int>();
stack.Push(10);
stack.Push(20);
var lastValueAdded = stack.Peek(); // 20
スタック上の要素を反復することができ、スタックの順序(LIFO)を尊重します。
Stack<int> stack = new Stack<int>();
stack.Push(10);
stack.Push(20);
stack.Push(30);
stack.Push(40);
stack.Push(50);
foreach (int element in stack)
{
Console.WriteLine(element);
}
出力(削除なし):
50
40
30
20
10
コレクション初期化子の使用
いくつかのコレクション型は、宣言時に初期化できます。たとえば、次の文は、 numbers
をいくつかの整数で作成して初期化します。
List<int> numbers = new List<int>(){10, 9, 8, 7, 7, 6, 5, 10, 4, 3, 2, 1};
内部的には、C#コンパイラはこの初期化を実際にAddメソッドの一連の呼び出しに変換します。したがって、この構文は、実際にAdd
メソッドをサポートするコレクションに対してのみ使用できます。
Stack<T>
クラスとQueue<T>
クラスはそれをサポートしていません。
キーと値のペアを取るDictionary<TKey, TValue>
クラスなどの複雑なコレクションの場合、初期化子リストで各キーと値のペアを匿名型として指定できます。
Dictionary<int, string> employee = new Dictionary<int, string>()
{{44, "John"}, {45, "Bob"}, {47, "James"}, {48, "Franklin"}};
各ペアの最初の項目はキーで、2番目の項目は値です。