ホームページ  >  記事  >  バックエンド開発  >  C# ジェネリック リスト List の基本的な使い方のまとめ

C# ジェネリック リスト List の基本的な使い方のまとめ

高洛峰
高洛峰オリジナル
2016-12-19 15:59:151546ブラウズ

サンプルコードは以下の通りです。
namespace SampleListT
{
class Program
{
static void Main(string[] args)
{
//using System.Collections.Generic List
//using System in名前空間 .Collections; 名前空間の ArrayList
//どちらもリスト コレクションを実装しており、1 つはジェネリック コレクションで、もう 1 つは非ジェネリックです
// 次に、コレクションに person オブジェクトを追加します

person p1 = new person ( "aladdin " , 20 );
person p2 = new person("zhao", 10);
person p3 = new Person("jacky", 40);

//リストのコンテナサイズが指定されていない場合、デフォルトは 0 ですが、要素が追加されると自動的に 4 に拡張されます。5 番目の要素が追加されると 8 になり、9 番目の要素が追加されると 16 になります
//常に指数関数的に増加するため、メモリを再度開くと効率に影響を与えるため、要素の数が事前にわかっている場合は、できるだけ大きなトレードオフ値を指定するのが最善です。可能な限り
//要素を 3 つ追加し、コンテナのサイズを 4 に設定します。 注: 4 つの要素しか配置できないというわけではありません。これを超えると指数関数的に拡張されます。展開によって生じるオーバーヘッド
List list = new List(4);

list.Add (p1);
list.Add(p2);
list.Add(p3);

//このメソッドは、余分な未使用のメモリ領域をクリアします。たとえば、割り当てサイズが 100 で、4 つだけを使用する場合、残りを残すのは無駄ではないでしょうか? //このメソッドが呼び出されたときに、要素の数がコンテナ サイズの 90% 以上を占める場合、リサイクルされません。
list.TrimExcess();

//ArrayList メソッドは List<> と同じように使用されますが、違いはオブジェクトのコレクションであり、パラメーターが Object であるため、ボックス化およびボックス化解除の可能性があることです。 . List を使ってみます<>

// これ以上のデモはありません

// 1 コレクターの初期化
// C# 3.0 以降、初期化関数が提供されていますが、IL では反映されません。
List l2 = new List() { 1 ,2 ,3 ,4 ,5 };

// 2 要素を追加する AddRange() このメソッドも ADD に変換されます。オブジェクトのバッチを一度に追加できます
List lists = new List(10);
//パラメータは更新する必要があるオブジェクト、または配列にすることもできます
list.AddRange( new Person[] { new Person( "aladdin" ,20) , new Person("zhao",6)});

//AddRange

List と同じ効果を持つ受信バッチ パラメーターを構築します。 = new List(new Person[] { new Person( " aladdin" ,20) , new Person("zhao",6)});

// 3 要素を挿入します
// Insert() を使用しますこのメソッドを使用すると、指定した位置に要素を挿入できます
// たとえば、位置 1 に挿入します。その後、最終的にアラジン ジャッキー ジャオになりました。挿入とは、この位置を前と後の位置に配置したことを意味します。彼はすべて 1 つ前に移動されます
mylist.Insert( 1 , new person( "jacky" , 88 ));

foreach (mylist の person p)

{
Console.WriteLine(p.name);
}

// 4 つのアクセス要素
// ArrayList と List はどちらもインデックスを提供します
Console.WriteLine( "--------------- 要素へのアクセス---------- ----------- --");

for (int i = 0; i {
Console.WriteLine(mylist[i].name);
}
//foreach ドロップ ジェネレーターを使用することもできます。実装するには、これ以上の例はありません
//Foreach メソッドを使用します

//public delegate void Action(T obj); 例ではデリゲートをパラメータとして使用します
// Day 式を使用していくつかの場所を実装します
Console.WriteLine( "------出力するには ForEach メソッドを使用します--------------- ---------------- ");

mylist.ForEach( param => Console.WriteLine(param.name) ) ;

// 5 要素の削除
//要素を削除するには、RemoveAt() を使用してインデクサー値を直接渡すことができます
// 最初の要素を直接削除します
mylist.RemoveAt(0);
//削除する要素を Remove メソッドに渡すこともできます

リスト<人> lists2 = 新しいリスト<人>(10);

人per1 = 新しい人( "aladdin" , 100 );

人per2 = 新しい人("zhao", 100);
人per3 = 新しい人("ジャッキー", 100);

lists2.Add(per1);

lists2.Add(per2);
lists2.Add(per3);

lists2.Remove(per3);

Console.WriteLine( " --------削除された要素--------" );

foreach (person per in lists2)
{
Console.WriteLine(per.name);
}
//結果から、Jacky という名前の要素が削除されたことがわかります
// の削除プロセスについて話しましょうRemove メソッド
// IndexOf メソッドを使用してオブジェクトのインデックスを決定し、インデックスによって削除します
// IndexOf メソッドでは、まず要素が IEquatable インターフェイスを実装しているかどうかを確認し、実装されている場合は Equals メソッドを呼び出します。このインターフェース
// 実装されていない場合は、Object の Equals メソッドを呼び出して要素を比較 (つまり、アドレス比較) します
// 上記では per3 を削除しましたが、これは明らかにアドレスであるため、削除されました

//次に Person を変更して IEquatable// 結果はすべて 3 です
// オブジェクトを削除したい場合は、 Remove メソッドは一連のプロセスの後、最後にインデックスによって削除するため、インデックスを使用して直接削除するのが最善です!

//RemoveRange() は範囲を削除します
//最初のパラメータの開始位置
//lists2.RemoveRange(1, 2);
//Console .WriteLine( "一括削除後----------------");

//foreach (person per in lists2)
//{
// Console.WriteLine(per. name);
//}


// 6 検索
// IndexOf を使用して検索することができます。 LastIndexOf FindIndex FindLasIndex FindFindLas 要素が存在するかどうかを確認したいだけの場合は、Exists() メソッドを使用できます
// IndexOf( ) メソッドは、オブジェクトがヒットした場合、そのインデックスを返します。コレクション内の要素が見つからない場合は、-1 を返します。IndexOf は、IEquatable インターフェイスを使用して要素を比較することもできます

List(10);

person1 = new person ("アラジン", 100);
人物 person2 = 新しい人物("zhao", 100);
人物 person3 = 新しい人物("ジャッキー", 100) ;

ls3.Add(person1);
ls3.Add( person2);
ls3.Add(person3);

// デフォルトのアドレス比較を使用するために、一時的に Person インターフェイス
int Index = ls3 を削除します。 IndexOf(person3);
Console.WriteLine( "index of per3 :" + Index); //2
// 検索範囲を 3 番目から指定することもでき、範囲の長さは 1
int Index2 = ls3.IndexOf(person3 ,2,1);
Console. WriteLine(index2);
//IEquatable 比較メソッドは以前に記述されているため、例は示しません

//FindIndex() メソッドは、特定の特性を持つ要素を検索するために使用されます
//例 パラメーターとしてデリゲートを使用する public delegate bool Predicate(T obj);

intindex3 = ls3.FindIndex(param => param.name.Equals("jacky"));
Console.WriteLine(index3 );/ / 2
// FindLastIndexここには重複する要素がないため、1 つだけを見つけて停止する効果は反映されません。 ("aladdin"));
Console.WriteLine(index4);
//Find メソッドは、要素自体を返す点を除いて、FindIndex メソッドと同じように使用されます
person ppp = ls3.Find( p => p .name.Equals("jacky")) ;
Console.WriteLine(ppp);

// 最初の要素を見つけたときに停止するのではなく、一致する要素をすべて検索したい場合は、FindAll メソッドを使用します

//年齢が 100 に等しいすべてのオブジェクト、およびそのうちの 3 つが
List newList = ls3.FindAll(p => p.age == 100);

Console.WriteLine( "----- - ----すべて検索---------");

foreach (person p in newList)

{
Console.WriteLine(p.name);
}

// 7 Sort
/ / リストは Sort メソッドを使用して並べ替えることができます。実装アルゴリズムはクイック ソートです
// このメソッドにはいくつかのオーバーロードがあります

// このメソッドは、要素に IComparable が実装されている場合にのみ使用できます。実装されている場合は、sort を 1 回直接呼び出すと、順序がソートされます
// public void Sort(Comparison 比較); // 私たちの担当者はそのインターフェイスを実装していないため、汎用のデリゲートを使用する必要があります。パラメータとして
//public void Sort(IComparer Comparer); //パラメータとしての汎用インターフェイス public delegate int Comparison(T x, T y);
//public void Sort(int index, int) count, IComparer Comparer); //範囲を指定できます

List(10);

person4 = new Person("aladdin", 100); person5 = 新しい人 ( "zhao", 33);

人 person6 = 新しい人 ("ジャッキー", 44);

ls4.Add(person4);

ls4.Add(person5);

ls4.Add(person6) ;

ls4.Sort(MyComparFunc);

Console.WriteLine( "-------------並べ替え済み---------------");


foreach ( ls4 の person p)

{

Console.WriteLine(p.name+ p.age );
}

Console.WriteLine( "----------順序を逆にします---------- --- ----");

ls4.Reverse();


foreach(ls4の人p)

{

Console.WriteLine(p.name+p.age);
}


// 8 タイプ変換
//コレクション内の要素を任意のタイプの要素に変換できます。たとえば、コレクション内の person を Racer オブジェクトに変換したいとします。Racer には名前のみが含まれ、年齢は含まれません。 // public ListConvertAll(Converterconverter);
// public デリゲート TOutput Converter(TInput input); ls5 = ls4.ConvertAll
Console.WriteLine( "----------変換されたもの--------");

foreach (Racer r in ls5)

{
Console.WriteLine(r.name);
}

// 9 読み取り専用コレクション

// コレクションが作成された後は、読み取りおよび書き込み可能でなければなりません。新しい要素は追加されましたが、入力が完了したと思われる場合は、何も変更しないでください。
// 読み取り専用コレクションを使用し、AsReadOnly メソッド () を使用して ReadOnlyCollection を返すことができます。これは List<> 操作と同じですが、コレクションを変更する操作が発生すると、例外が発生します

ReadOnlyCollection ();

Console.WriteLine("読み取り専用コレクションを出力 ");

foreach (レーサー r in persss)

{

Console.WriteLine(r.name);

}

Console.ReadLine();

}

//比較用に書かれた委任実装メソッド

public static int MyComparFunc(Person p1, Person p2)

{

if (p1.age == p2.age)
{
return 0;
}
else if ( p1.age&gt;
}
}
}


C# ジェネリック リスト List の基本的な使い方の概要に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。