.NETのコアCSHARP中間の記事2-2リスト、ArrayListのと辞書

.NETのコアCSHARP中間の記事2-2

このセクションでは、List、ArrayListに、と辞書が含まれています

簡単な紹介

前回の記事では、我々は配列を使用することを学んだが、配列は、大きな問題は、ストレージスペースの不足ですしている、私たちはいつものソリューションは通常、偉大なる、絶対に十分な配列を定義することである持っているが、メモリ内に生じるであろう損失。私たちは常に、よりダイナミックな変化のニーズに応じてストレージアレイを持っていると思います。総合的なタイトルの一つのリストの概念を曖昧リードされています。このセッションでは、我々は、詳細一覧で説明します。

同時に、時々私達はちょうど私たちのデータストアの配列を望んでいません。例えば、私はいくつかのデータがあります願っています:

誰か転写物は、次のとおりです。

  • 80点の言語
  • 数学90点
  • 英語87

これらのデータのために、我々は、アレイは、このスコアに良いフィードバック、私たちは私たちの辞書が保存された使用する必要がこの時間ではありません使用します。

リスト、ArrayListに

配列リスト

以上述べたように、アレイは、連続した収納スペースで、アクセス速度は非常に高速ですが、あなたは、私たちはArrayListの使用を使用することができます。この時間をサイズを指定する必要があります。ArrayListのは位置にSystem.Collections、継承とのIListインターフェイスは、運用データを提供するクラスです。これは、アレイの場所よりも優れている、それは任意のサイズと種類を指定していない、直接使用することができます。

ArrayList al = new ArrayList();
al.Add("test");
al.Add(1234);
//修改数据
al[1] = 4;
//移除数据
al.RemoveAt(0);
//插入数据
al.Insert(0, "qwe");

それのために非常に使いやすいルックス、あなたは別のデータを挿入して変更することができます。しかし、実際には、これが業績の大きな損失です。ArrayListの中に挿入された異なるタイプのデータが許可されているため、その後のデータ処理時に、内部ArrayListのすべてのデータは、オブジェクトタイプを処理するようにので、データのそれぞれにトラバースするとき、およびパッキングが発生我々が議論し、最後の講義ではボックス化解除の操作、資格の頻繁な損失は、非常にパフォーマンスです。したがって、ArrayListには、多くの場合、実際に使用されていません。

ジェネリックリスト

不安につながる、資格のArrayListの異なる種類を解決するためにと、私たちはジェネリックListクラスを使用します。リストArrayListクラスはListクラスもIListインターフェイスを継承するため、その用途のほとんどは、ArrayListに似ている、ジェネリッククラス等価クラスです。主な違いは、あなたがリストのコレクションを宣言するとき、我々はまた、一般的なパラメータであるデータのリスト収集、中にそのオブジェクト型を宣言する必要があるということです。私たちは、
主要記事の演習を統合漠然とリストに関する部分につながるされています。:次のように定義されたリストについては、

List<T> list = new List<T>();
list.Add(new T());
list[0];
list.Remove(T);

一覧については、そのリストは、内部要素を横断するforeachループの使用をサポートすることが非常に重要なインターフェース--IEnumerableを実装します。しかし、ときのforeach、違法以下の操作を使用しました:

foreach(var item in MyList)
{
    MyList.Remove(item);//不过我相信没有人那么干,但是....
    //这种操作我不止一次见过有人问我
    if(item.something == something)
    {
        MyList.Remove(item);
    }

}

今回は、私たちがforeachループを説明する前に、foreachループの要素で、このように動的な削除に慎重に戻って記憶を必要とする理由、正当ではないでしょうか?foreachループは、MoveNextメソッド()メソッドを呼び出しているので、あなたはノード缶前に知っておく必要があり意味し、ノードは文字列コレクションに接続されたノードとなり、あなただけ後方ノードにアクセスすることができます想像することができますあなたはノードへのアクセスを持っている場合、あなたはそれを削除することを想定し、ノードを訪問した後、後続のノードへのアクセスはアクセスできません。それを解決する方法はありませんか?確かに、しかし、あなただけのforループを使用することができ、リストがカウントというプロパティがあり、これは持っている現在のリスト内のすべての要素の数を表し、リストのインデクサーを実現し、それはリストと同様であることができる、と言うことです次のようにMYLIST [0]訪問する方法を、この時間は、あなたが削除ループダイナミックのために使用する必要があります。

for(int i =0;i<MyList.Count;i++)
{
    if(MyList[i].something == something)
    {
        MyList.Remove(MyList[i]);
    }
}

辞書

あなたは過剰需要の冒頭で言及されている必要があります。何度も単純なインデックス値は私たちに多くの情報を提供する方法はありません、我々は常にデータを保存するために、キーと値のペアを使用する傾向があります。だから、辞書は、あなたの問題に良い解決策になります。その基本的な構造は一般的な2つのパラメータによって変更され、辞書<TKEY、TValue>、値の型に続いてキータイプ、目の前に、あなたはまた、辞書には、特別なセットとして理解することができます。その使用は、次のように:

Dictionary<string,string> dict = new Dictionary<string,string>();
dict.Add("广东","广州");
dict.Add("江西","南昌");
dict["江西"];
dict.remove("广东");

反復の結果は、大多数のキーと値のペア、値リストの一般的な辞書であるため、一般的に言って、私たちはほとんど、foreachの直接アクセスの辞書を使用しないので、一般的に反復キーです。

辞書リストとほとんどの操作が接近している、ここではあまり詳しく説明しません。

IEnumerableをとIListインターフェイス

コレクション(リスト)これらの二つの重要なインターフェースインターフェースの実装、IEnumerableをはIListのは、操作の対応するセットを提供し、反復的な機能を提供し、我々は彼らのメタデータから学ぶことは非常に良いことができます。

IEnumerableインターフェイス

それは、次のメタデータに定義されています。

    public interface IEnumerable<out T> : IEnumerable
    {
        //
        // 摘要:
        //     Returns an enumerator that iterates through the collection.
        //
        // 返回结果:
        //     An enumerator that can be used to iterate through the collection.
        IEnumerator<T> GetEnumerator();
    }

我々は明らかに我々はIEnumerableをは共変でサポートし、即ち、一般的なパラメータは、キーワードを変更している見つけることができます。私たちは、簡単のような他のデータへのデータのIEnumerableをタイプに変換することができます:

IEnumerable<string> strs = new IEnumerable<string>();
IEnumerable<object> obj = strs;

だから私は、通常使用している場合、私の代わりに、操作の一覧のIEnumerableをデータの一部を使用することをお勧めします。

IListインターフェイス

古いルールは、メタデータを見てみましょう

 public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
 {
     //省略
 }

ここでは、IListのは不変である、共変をサポートしていません見つけることができ、その後、次の使用が有効ではありません。

IList<string> strs = new IList<string>();
IList<object> obj = strs;

私の記事はあなたを助ける場合は、あなたのgithubの.NETのコアガイドプロジェクトは私にスター、庭の中間点のブログでの懸念と勧告を助けていてください。

Githubの

嗶哩嗶哩ホーム

WarrenRyanのブログ

ブログパーク

おすすめ

転載: www.cnblogs.com/WarrenRyan/p/11294784.html