C#リストの使い方

高洛峰
リリース: 2016-12-15 15:26:29
オリジナル
1544 人が閲覧しました

コレクションは OOP の重要な概念であり、C# でのコレクションの包括的なサポートは言語の本質の 1 つです。

ジェネリック コレクションを使用する理由は何ですか?

C# 2.0 より前には、コレクションを実装する主な方法が 2 つありました。

a. ArrayList

を使用してオブジェクトを ArrayList に直接配置します。ただし、コレクション内の項目は Object 型であるため、面倒な型変換を実行するたびに使用されます。

b. カスタム コレクション クラスを使用する

一般的なアプローチは、CollectionBase 抽象クラスからカスタム クラスを継承し、IList オブジェクトをカプセル化することで厳密に型指定されたコレクションを実装することです。この方法では、コレクション型ごとに対応するカスタム クラスを作成する必要があり、大きなワークロードが必要になります。ジェネリック コレクションの登場により、上記の問題は 1 行のコードだけで、指定された型のコレクションを作成できるようになりました。

ジェネリック医薬品とは何ですか?

ジェネリックは C# 2.0 の新しい要素 (C++ ではテンプレートと呼ばれます) であり、主に一連の同様の問題を解決するために使用されます。このメカニズムにより、クラス名をパラメーターとしてジェネリック型に渡し、対応するオブジェクトを生成することができます。ジェネリックス (クラス、インターフェイス、メソッド、デリゲートなどを含む) をテンプレートと考えると、テンプレート内のバリアント部分がパラメーターとして渡されたクラス名に置き換えられ、それによって新しい型定義が取得されます。ジェネリックは比較的大きなトピックなので、ここでは詳しく分析しません。興味がある方は関連情報を参照してください。



汎用コレクションを作成するにはどうすればよいですか?

コレクションを作成するには、主に System.Collections.Generic 名前空間の List ジェネリック クラスを使用します。 構文は次のとおりです。

次のように Person クラスを定義します。

ご覧のとおり、ジェネリック コレクションは、コレクションの実装コードを使用すると、指定した型のコレクションを簡単に作成できます。それだけでなく、汎用コレクションはさらに強力な機能も提供します。並べ替えと検索を見てみましょう。

List ListOfT = new List();

「T」は使用する型で、string、int、またはユーザー定義型などの単純な型を指定できます。以下に具体的な例を見てみましょう。


class person

{

public person(string Name, int Age) )

this._name= 名前;

this._age = 年齢;

}

//Name

public string Name

{

get { return _name }

}

//年齢

public int Age

{g Get {Return_age;}}}} // 人物オブジェクトを作成します

人物 P1 = 新しい人物 ("Zhang San", 30);

人物 P2 = 新しい人物 ( "李思", 20);

person p3 = new person("王五", 50);

//タイプ person のオブジェクトのコレクションを作成します

List people = new List() ;

// Person オブジェクトをコレクションに入れます

persons.Add(p1);

persons.Add(p2);

persons.Add(p3);

//2 番目の人物の名前を出力します

Console.Write(persons[1].Name);

一般的なコレクションの並べ替え

並べ替えは比較に基づいて行われます。たとえば、2 つの数値 1 と 2 があります。これらを並べ替えるには、まず 2 つの数値を比較し、比較結果に基づいて並べ替える必要があります。オブジェクトを比較する場合、状況は少し複雑になります。たとえば、人物オブジェクトを比較する場合は、名前または年齢で比較できますが、これには比較ルールを決定する必要があります。オブジェクトには複数の比較ルールを含めることができますが、オブジェクトを定義するクラスに配置されるデフォルト ルールは 1 つだけです。デフォルトの比較ルールは、IComparable 汎用インターフェイスに属する CompareTo メソッドで定義されます。次のコードを参照してください: lClass Person: iComparable & LT; Person & GT; }

}

CompareTo メソッドのパラメータは比較対象となる同じ型の別のオブジェクトであり、戻り値は int 型です。戻り値が 0 より大きい場合は、最初のオブジェクトが 2 番目のオブジェクトより大きいことを意味します。戻り値が 0 より小さい場合は、1 番目のオブジェクトが 2 番目のオブジェクトより小さいことを意味します。等しい。

デフォルトの比較ルールを定義した後、以下に示すように、パラメータを指定せずに Sort メソッドを使用してコレクションを並べ替えることができます:

// デフォルトのルールに従ってコレクションを並べ替えます

persons.Sort();

//すべての人物の名前を出力します

foreach (人名p)

{

Console.WriteLine(p.Name) //出力順は「李思」、「张三」、「王」です。五"

}

実際の使用では、多くの異なるルールに従ってコレクションを並べ替える必要があることがよくあります。これには、Compare メソッドで定義できる他の比較ルールを定義する必要があります。このメソッドは IComparer 汎用インターフェイスに属します。以下を参照してください。 コード:

class NameComparer: IComparer

{

//ストレージ ソーター インスタンス

public static NameComparer Default = new NameComparer();

//名前で比較

public int Compare (人物 p1、人物 p2)

. Name); の場合、戻り値は int 型であり、戻り値の処理規則はCompareTo メソッド。その中の Comparer.Default は、同じ型の 2 つのオブジェクトを比較するための組み込みの Comparer オブジェクトを返します。

次に、新しく定義したコンパレータを使用してコレクションを並べ替えます。

委任によってコレクションを並べ替えることもできます。まず、比較ルールを保存するために委任が呼び出すメソッドを定義する必要があります。以下のコードを見てください: 次に、組み込みの汎用デリゲート System.Comparison を使用してコレクションを並べ替えます:

ご覧のとおり、後の 2 つのメソッドは指定されたルールに従ってコレクションを並べ替えることができますが、作成者はこの方法を好みます。デリゲーション方式では、さまざまな比較ルールをクラスに入れて柔軟に呼び出すことが考えられます。

//コレクションを名前で並べ替えます

persons.Sort(NameComparer.Default);

//全員の名前を出力します

foreach (person p in people)

{

Console.WriteLine(p.Name ;

) {

return System.Collections.Comparer.Default.Compare(p1.Name, p2.Name); 型、戻り値の処理規則は CompareTo メソッドと同じです。

System.Comparison NameComparison = new System.Comparison(PersonComparison.Name);

persons.Sort(NameComparison);

//全員の名前を出力します

foreach (人名p)

{

Console.WriteLine(p.Name); //出力順序は "Li Si"、"Wang Wu"、"Zhang San" です

}

ご覧のとおり、後者の 2 つのメソッドは次の目的で使用できます。 「ソートのルールを指定する」に従ってコレクションを設定しますが、作成者は委任を使用することを好みます。さまざまな比較ルールをクラスに入れて、それらを柔軟に呼び出すことを検討できます。

一般的なコレクションの検索

検索とは、コレクションから特定の条件を満たすアイテムを検索することです。複数の検索条件を定義し、必要に応じて呼び出すことができます。まず、検索条件を次のように定義します。

class PersonPredicate

{

//中年(40歳以上)を探す

public static bool MidAge(person p)

{

if (p. 年齢 > 特定を満たす 条件の項目は true を返し、それ以外の場合は false を返します。

System.Predicate MidAgePredicate = new System.Predicate(personPredicate.MidAge);

List MidAgepersons = people.FindAll(MidAgePredicate);

//中年全員の名前を出力しますpeople

foreach (person p in MidAgepersons)

{

Console.WriteLine(p.Name); //Output "王五"

} 次に、組み込みの汎用デリゲート System.Predicate

ジェネリック コレクションの拡張

コレクション内のすべての人の名前をカンマで区切って取得したい場合、どうすればよいでしょうか?

単一のクラスが提供できる機能には制限があることを考慮すると、List クラスもクラスなので、継承によって拡張することを考えるのが自然です。以下のコードを見てください:

// Persons コレクション クラスを定義します

class Persons: List

{

// コレクション内のすべての人の名前を取得します

public string GetAllNames( )

{

this.Count == 0)

;

}

return val.Substring( 0、val.Length - 1);

}

}

// Persons コレクションを作成してデータを設定します

Persons PersonCol = new Persons();

PersonCol.Add(p1);

PersonCol.Add(p2);

PersonCol.Add(p3);

//Output全員の名前

Console.Write(PersonCol.GetAllNames()); //出力「Zhang San, Li Si, Wang Wu 」

List メソッドまたは属性関数のメソッドと属性

Capacity は数値を取得または設定するために使用されますリストが収容できる要素の数。数量が容量を超えると、この値は自動的に増加します。この値を設定して容量を減らすか、trin() メソッドを呼び出して実際の要素数に合わせて容量を減らすことができます。

Count プロパティ。配列内の現在の要素数を取得するために使用されます。

Item() インデックスを指定して要素を取得または設定します。 List クラスの場合、これはインデクサーです。

Add( ) List にオブジェクトを追加するパブリック メソッド

AddRange( ) List の最後に ICollection インターフェイスを実装する複数の要素を追加するパブリック メソッド

BinarySearch( ) 並べ替えに使用されるオーバーロードされたパブリック メソッド バイナリを使用リスト内の指定された要素を検索します。

Clear( ) リストからすべての要素を削除します。

Contains( ) 要素がリスト内にあるかどうかをテストします。

CopyTo( ) オーバーロードされたパブリック メソッド、リストを 1 つにコピーします。 -次元配列

Exists()は、要素がList内にあるかどうかをテストします

Find()は、List内に表示される最初に一致する要素を検索して返します

FindAll()は、List内で一致するすべての要素を検索して返します

GetEnumerator () オーバーロードされたパブリック メソッド、反復のための列挙子を返します List

Getrange() 指定された範囲内の要素を新しい List

IndexOf() オーバーロードされたパブリック メソッド、それぞれを検索して返します 一致する要素のインデックス

Insert () List に要素を挿入します

InsertRange() List に要素のセットを挿入します

LastIndexOf() オーバーロードされた public メソッドで、最後に一致した要素のインデックスを検索して返します

Remove() は最初に一致した要素を削除します指定された要素と一致します

RemoveAt( ) 指定されたインデックスにある要素を削除します

RemoveRange( ) 指定された範囲内の要素を削除します

Reverse( ) リスト内の要素の順序を逆にします

Sort() 要素を並べ替えますList 内の要素

ToArray() List 内の要素を新しい配列にコピーします

trimToSize() List 内の実際の要素数に容量を設定します

概要:

この記事では、Yu の使用法を紹介することに焦点を当てます。 C# 2.0 のジェネリックを使用してコレクションを実装し、コレクション関数を拡張すると、多くの反復作業が軽減され、開発効率が大幅に向上します。実際、コレクションはジェネリックの典型的なアプリケーションにすぎません。ジェネリックについて詳しく知りたい場合は、他の関連情報を確認してください。この記事がお役に立てば幸いです

C# リストの使用方法に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート